<prompt> Anzisha programu ya C inayosoma faili ya CSV iliyo na maelezo ya mtumiaji jina, umri, barua pepe na kuhifadhi data katika hifadhidata ya SQLite. Programu inapaswa pia kutoa utendakazi wa kuuliza hifadhidata kwa watumiaji kulingana na umri wao au anwani ya barua pepe.  <response>: Hapa kuna programu ya C inayoonyesha jinsi ya kusoma faili ya CSV iliyo na maelezo ya mtumiaji na kuhifadhi data katika hifadhidata ya SQLite. Mpango huo pia hutoa utendaji wa kuuliza hifadhidata kwa watumiaji kulingana na umri wao au anwani ya barua pepe.cpppamoja na pamoja na pamoja na pamoja na pamoja na pamoja na muundo wa mtumiaji std::jina la kamba; umri wa int; std::barua pepe ya mfuatano;;std::vector read_csvconst std::string filename std::ifstream faili jina la faili; std::vector watumiaji; ikiwa !faili.is_open std::cerr Hitilafu katika kufungua faili: filename std::endl; watumiaji wa kurejesha; std:: mstari wa kamba; wakati std::getlinefaili, mstari std::stringstream ssmstari; Mtumiaji wa mtumiaji; std::string age_str; std::getliness, user.name, ,; std::getliness, age_str, ,; user.age std::stoiage_str; std::getliness, user.email, ,; watumiaji.push_backmtumiaji; watumiaji wa kurejesha;static int callbackbatili haijatumiwa, int argc, char argv, char col_name kwa int i 0; i argc; i std::cout col_namei : argvi ? argvi : NULL std::endl; std::cout std::endl; kurudi 0;utupu create_tablesqlite3 db const char sql UNDA JEDWALI IKIWA HAIPO watumiaji jina TEXT, umri INTEGER, barua TEXT;; char err_msg nullptr; int rc sqlite3_execdb, sql, nullptr, nullptr, err_msg; ikiwa rc ! SQLITE_OK std::cerr Hitilafu katika kuunda jedwali: err_msg std::endl; sqlite3_bureerr_msg; utupu insert_userssqlite3 db, const std::vector watumiaji kwa const auto user : users std::stringstream ss; ss WEKA NDANI ya watumiajijina, umri, barua pepe VALUES user.name , user.age , user.email ;; char err_msg nullptr; int rc sqlite3_execdb, ss.str.c_str, nullptr, nullptr, err_msg; ikiwa rc ! SQLITE_OK std::cerr Hitilafu katika kuingiza data: err_msg std::endl; sqlite3_bureerr_msg; swala batili_watumiaji_kwa_umrisqlite3 db, umri wa ndani std::stringstream ss; ss CHAGUA KUTOKA kwa watumiaji WHERE age umri ;; char err_msg nullptr; int rc sqlite3_execdb, ss.str.c_str, callback, nullptr, err_msg; ikiwa rc ! SQLITE_OK std::cerr Hitilafu katika kuuliza data kwa umri: err_msg std::endl; sqlite3_bureerr_msg; utupu query_users_by_emailsqlite3 db, const std::string email std::stringstream ss; ss CHAGUA KUTOKA KWA watumiaji WAPI barua pepe barua pepe ;; char err_msg nullptr; int rc sqlite3_execdb, ss.str.c_str, callback, nullptr, err_msg; ikiwa rc ! SQLITE_OK std::cerr Hitilafu katika kuuliza data kwa barua pepe: err_msg std::endl; sqlite3_bureerr_msg; int main const std::string filename users.csv; std::vector watumiaji read_csvjina la faili; sqlite3 db; int rc sqlite3_openuser_data.db, db; ikiwa rc std::cerr Hitilafu katika kufungua hifadhidata: sqlite3_errmsgdb std::endl; kurudi rc; create_tabledb; insert_usersdb, watumiaji; Waulize watumiaji kulingana na umri query_users_by_agedb, 25; Waulize watumiaji kwa barua pepe query_users_by_emaildb, sqlite3_closedb; kurudi 0;Ili kukusanya na kuendesha programu, unahitaji kuwa na SQLite iliyosakinishwa kwenye mfumo wako. Unaweza kuisakinisha kwa kutumia kidhibiti cha kifurushi kama apt au brew. Kisha, tumia amri ifuatayo kuunda:shg -stdc11 -o mtumiaji_db user_db.cpp -lsqlite3Na endesha binary iliyojumuishwa na:sh.mtumiaji_dbMfano huu unachukulia kuwa kuna faili ya CSV inayoitwa users.csv katika saraka sawa na faili ya msimbo wa chanzo. Yaliyomo kwenye faili ya CSV yanapaswa kuumbizwa kama hii:John Smith, 