• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Warunek czytany z pliku

Geoinformatyka UKSW Warszawa rekrutacja
+1 głos
64 wizyt
pytanie zadane 29 stycznia 2017 w C i C++ przez czujek22 Mądrala (6,460 p.)
Witam. Otoz mam program, ktory jest jakby terminarzem do nauki jakiegoś materiału. W menu do wyboru jest m.in dodanie zdarzenia (dzien, nazwa materialu, status nauczony/nienauczony), zmiana statusu, odczytanie z pliku wszystkich zdarzen (po 3 wiersze kazda) i odczytanie tylko tych nauczonych.

I ponieważ w pliku tekstowym zawsze w co 3 wierszu jest status podany to jak to zaprogramować aby program sprawdzał na początku tą 3 linie i zależnie od niej wyświetlał lub nie poprzednie dwie itd ?

2 odpowiedzi

0 głosów
odpowiedź 29 stycznia 2017 przez .kassad Gaduła (3,420 p.)

Możesz przesuwać wskaźnik w pliku za pomocą fseek() (jeżeli rzeczywiście kodzisz w C), albo innej równoważnej funkcji. Czy taki format pliku został ci narzucony, czy wybrałeś go sobie sam? Jeżeli wybrałeś go sobie sam, nie prościej byłoby tę trzecią linię przesunąć na początek?

komentarz 29 stycznia 2017 przez czujek22 Mądrala (6,460 p.)
Zrobiłem sobie sam taki format. Przesunięcie wiersza na początek rozwiąże problem wyświetlenia materiałów nauczonych jednak znowu przy wyświetlaniu wszystkich materiałów chciałbym aby pierwszy był dzień zdarzenia a nie status :) Poczytam o tym fseek()
komentarz 29 stycznia 2017 przez .kassad Gaduła (3,420 p.)
Nie wiem, w jaki sposób, odczytujesz dane z pliku, ale strzelam, że linia po linii. Ja widziałbym to tak: najpierw wczytujesz sobie do pierwszej zmiennej status i sprawdzasz jego wartość. Potem do jakichś innych zmiennych wczytujesz pozostałe dwie linie, wyświetlasz je, a na końcu wyświetlasz ten status. Jeżeli dane na temat zdarzenia rozrosłyby się do więcej niż kilka linii, można by te linie następujące po statusie odczytywać z pliku i od razu wyrzucać na ekran w pętli.
0 głosów
odpowiedź 29 stycznia 2017 przez Munvik Dyskutant (7,510 p.)
Może 3 std::stringi (każdy na 1 linijkę).

Wczytujesz wszystkie 3 linijki do 3 stringów i patrzysz w tym trzecim status. Jeżeli tak to działasz na nich, jeżeli nie, to lecisz dalej resetujac wcześniej stringi.
komentarz 29 stycznia 2017 przez czujek22 Mądrala (6,460 p.)
void show_learned(fstream & ofs)
{
    if (ofs.good() == true )
    {
        string l1;
        string l2;
        string l3;
        while ( !ofs.eof() )
        {

            getline(ofs,l1);
            getline(ofs,l2);
            getline(ofs,l3);


            if(l3=="Przerobiony material")
            {
                cout<<l1<<endl;
                cout<<l2<<endl;
            }

        }
    }
    else cout<<"ERROR\n\n";
}

Takie coś nie zadziała?

 

komentarz 29 stycznia 2017 przez Munvik Dyskutant (7,510 p.)

Zadziała. Jeszcze jedna rzecz:

Wystarczy

if (ofs.good())

 

 

komentarz 29 stycznia 2017 przez czujek22 Mądrala (6,460 p.)

Kompilować się kompiluje, jednak po wybraniu opcji w menu program kończy prace.

case 4:
{
            plik.open("terminarz.txt", ios::in | ios::out | ios::app);
            show_learned(plik);
            plik.close();
            break;
}

Dalszą część programu dałem wyżej.

PS. wiem, że wystarczy ios::in w tym wypadku

komentarz 29 stycznia 2017 przez Munvik Dyskutant (7,510 p.)
Wydaje mi się, że to może być wina pliku, albo nic w nim nie ma albo źle się otwiera. Użyj fstream::is_open().
komentarz 29 stycznia 2017 przez czujek22 Mądrala (6,460 p.)
Ok, już wiem gdzie leży problem. W warunku pętli z menu miałem !=4, gapa ze mnie :)

Jednak teraz i tak nic nie wyswietla program

Podobne pytania

0 głosów
1 odpowiedź 115 wizyt
0 głosów
1 odpowiedź 102 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez AndekQR Użytkownik (780 p.)
0 głosów
3 odpowiedzi 104 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

54,241 zapytań

98,002 odpowiedzi

201,487 komentarzy

26,619 pasjonatów

Przeglądających: 328
Pasjonatów: 24 Gości: 304

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...