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

Warunek czytany z pliku

+1 głos
62 wizyt
pytanie zadane 29 stycznia 2017 w C i C++ przez czujek22 Mądrala (5,840 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,380 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 (5,840 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,380 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 Mądrala (6,910 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 (5,840 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 Mądrala (6,910 p.)

Zadziała. Jeszcze jedna rzecz:

Wystarczy

if (ofs.good())

 

 

komentarz 29 stycznia 2017 przez czujek22 Mądrala (5,840 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 Mądrala (6,910 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 (5,840 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ź 102 wizyt
0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez AndekQR Użytkownik (710 p.)
0 głosów
1 odpowiedź 78 wizyt
pytanie zadane 19 stycznia w C i C++ przez foruminfa Początkujący (290 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.
Ciekawy innych porad? Odwiedź tę stronę!

45,873 zapytań

86,345 odpowiedzi

172,633 komentarzy

22,284 pasjonatów

Przeglądających: 113
Pasjonatów: 6 Gości: 107

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.

...