Wczytywanie i zapisywanie w pliku – jak to zrobić?

0

Cześć.
Jestem amatorem co do C++ ale chętnie się uczę. Ostatnio wpadł mi do głowy pomysł żeby napisać swojego rodzaju "robota". Chodzi tu o to, aby zadawać mu pytania które będzie miał zapisywane w innym pliku wraz z odpowiedziami które wyświetli. Jeśli nie będzie miał któregoś pytania zapisanego - poprosi o odpowiedź i sam dopisze to do swojego pliku. W ten sposób po jakimś czasie takiej "samoedukacji" będzie miał jakiś zakres "wiedzy". No i tutaj pojawia się pytanie. W jaki sposób się do tego zabrać? Macie jakieś przykłady? Wskazówki? Nie szukam jelenia, sam chcę to zrobić żeby się nauczyć ale chętnie się czymś pokieruje.
Pozdrawiam

0

Jeśli interesuję cię rozwiązanie po najniższej linii oporu(jednemu ciągowi znaków odpowiada drugi), to wystarczy zapoznanie się z biblioteką <fstream>. W innym przypadku założenia są mało precyzyjne.

0

Na początek zapisz to do pamięci, uporządkuj. Jak masz to w pamięci łatwo zapiszesz do pliku, wskazano już <fstream> jako podstawowe rozwiązanie, choć jeśli uczysz się C++, to celowalbym w wysokopoziomowe rozwiązanie - ODB, czyli rozwiązanie automatycznie zapisujące obiekty w pliku. Dużo ci nie opowiem, bo jestem typem niskopoziomowca. W C, najniżejpoziomowo rozwiąznie jest takie:

struct Information {
    char question[100];
    char answer[100];
};

int main() {
    struct Information i = {
        question = "Ilu sąsiadów ma Polska?",
       .answer = "7"
    };

    FILE *output = fopen("x.dat", "w");
    fwrite(&i, sizeof(Information), 1, output);
    close(output);
}

Innymi słowy po prostu kopiuję kawalki pamięci do pliku w określonym porządku. Ten kawałek kodu jest wysoce niewydajny, ale na dobry początek i najprościej ilustruje problem na najniższym poziomie (w ODB i tym podobnych masz wylane - po to są języki wysokiego poziomu). Jeśli skorzystać z API systemowego jest nawet możliwy zapis do pliku poprzez zapis do pamięci (polecenie nmap() w POSIX). Jak lubisz rozumieć rzeczy, polecam od tego zacząć, jest to pewnie mało poręczne, z drugiej strony to dobra lekcja programowania. Nie jest to jednak sposób właściwy dla C++ tylko dla C.
Nie jestem pewny czy C++ jest dobrym językiem jeśli takie najbardziej podstawowe rzeczy cię nie interesują. Są języki z lepszą abstrakcją, pozwalające pisać mniej kodu, C++ robi się co raz bardziej niszowe. W skrajnym przypadku polecałbym po prostu od razu uderzyć w stronę machine learning, żeby zrobić to naprawdę kozacko.

0

Zainteresuj się kontenerem std::map oraz std::unordered_map, a także typem std::string. Zapis wykonasz do pliku z użyciem std::fstream (wersje std::ifstream, std::ofstream). Jeśli danych będzie niewiele (orientacyjnie ~ 1000 wpisów), wystarczy wersja z odczytaniem przy starcie par zapytanie i odpowiedź gdzie zapytanie będzie kluczem w mapie, oraz zapisanie wszystkich przy zakończeniu programu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1