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

Warunek czytany z pliku

Object Storage Arubacloud
+1 głos
132 wizyt
pytanie zadane 29 stycznia 2017 w C i C++ przez czujek22 Dyskutant (7,670 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 Dyskutant (7,670 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 (9,350 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 Dyskutant (7,670 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 (9,350 p.)

Zadziała. Jeszcze jedna rzecz:

Wystarczy

if (ofs.good())

 

 

komentarz 29 stycznia 2017 przez czujek22 Dyskutant (7,670 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 (9,350 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 Dyskutant (7,670 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
3 odpowiedzi 861 wizyt
0 głosów
1 odpowiedź 308 wizyt
pytanie zadane 19 stycznia 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 924 wizyt
pytanie zadane 28 października 2017 w PHP przez smokolisz Mądrala (6,340 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...