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

Warunek czytany z pliku

VPS Starter Arubacloud
+1 głos
131 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 853 wizyt
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 19 stycznia 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 886 wizyt
pytanie zadane 28 października 2017 w PHP przez smokolisz Mądrala (6,340 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...