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

Odczytywanie z pliku tekstowego C++ błąd

VPS Starter Arubacloud
0 głosów
874 wizyt
pytanie zadane 5 lutego 2018 w C i C++ przez AgaLuk Nowicjusz (210 p.)

Cześć,

Mam problem przy odczytywaniu pliku tekstowego. Znalazłam podobne pytanie, umieściłam tam swoje, ale pozostało bez odpowiedzi, więc ponawiam pytanie tutaj. 

 Pomimo, że wszystko wydaje się być w porządku, tylko w tym jednym programie nie chce się odczytać plik tekstowy. Obojętnie czy w nazwie jest .txt, czy nie ma pojawia mi się "Plik nie istnieje". Jeżeli mam nazwę "quiz", a w kodzie: plik.open("quiz.txt", ios::in ); to wtedy program się zawiesza. 

https://i.imgur.com/m4frxT6.png

Program robię z kursów M. Zelenta. Gdy ściągnęłam jego kod działa bez problemowo, wcześniejsze ćwiczenie również działa. Możliwe, że źle stworzyłam plik, ale nie wiem jak inaczej go stworzyć (może jakieś podpowiedzi? Ja po prostu napisałam w notatniku). Skopiowałam nawet z plików M. Zelenta i wkleiłam tam swoje pytania i dalej nic... Nawet w akcie desperacji zainstalowałam NotepadC++ (Ale to też nic nie dało).  Próbowałam również włączyć i wyłączyć komputer ;)

Używam CodeBlocks, a plik tekstowy jest w folderze ze wszystkimi plikami do programu. 

Dzięki za pomoc :)  


#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>


using namespace std;

string temat, nick;
string tresc [5];
string odpA[5], odpB[5], odpC[5], odpD[5];
string poprawna [5];
string odpowiedz;
int punkty=0;

int main()
{
    int nr_linii=1;
    string linia;
    int nr_pytania=0;

    fstream plik;
     plik.open("quiz.txt", ios::in );
     if(plik.good()==false)
     {
         cout<<"Plik nie istnieje!";
         exit(0);
    }

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: temat;                  break;
            case 2: nick;                   break;
            case 3: tresc[nr_pytania] = linia;       break;
            case 4: odpA[nr_pytania] = linia;        break;
            case 5: odpB[nr_pytania] = linia;        break;
            case 6: odpC[nr_pytania] = linia;        break;
            case 7: odpD[nr_pytania]= linia;         break;
            case 8: poprawna; linia    ;    break;
        }
        if (nr_linii==8) {nr_linii=2; nr_pytania++;}

        nr_linii++;
    }
    plik.close();

    for (int i=0; i<=4;i++)
    {
        cout<<endl<<tresc[i]<<endl;
        cout<< "A. "<<odpA[1]<<endl;
        cout<< "B. "<<odpB[1]<<endl;
        cout<< "C. "<<odpC[1]<<endl;
        cout<< "D. "<<odpD[1]<<endl;

        cout<< "Twoja odpowiedz: ";
        cin>> odpowiedz;

        transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(),::tolower);

        if (odpowiedz==poprawna[i])
        {
            cout<<"Dobrze! Zdobywasz punkt!"<< endl;
            punkty++;
           } else cout<< "Zle! Brak punktu! Poprawna odpowiedz " << poprawna[i]<< endl;

    }

    cout<< endl<< "KONIEC QUIZU! Zdobyte punkty: "<< punkty;
    return 0;
}

1 odpowiedź

0 głosów
odpowiedź 5 lutego 2018 przez j23 Mędrzec (194,920 p.)

a plik tekstowy jest w folderze ze wszystkimi plikami do programu. 

Wrzuć go do folderu z exekiem, ewentualnie zmień ścieżkę w Project options > Build targets > Execution working dir (daj '.', wtedy będzie to katalog projektu)

komentarz 5 lutego 2018 przez AgaLuk Nowicjusz (210 p.)
Dziękuję za rady, niestety nadal jest "program quiz.exe przestał działać". Gdy wrzucam plik tekstowy od M.Zelenta to spokojnie wczytuje i działa cały quiz. Ale mój dokument tekstowy nie działa. Nawet po prostu skopiowałam swoje pytania do pliku tekstowego z kursu Zelenta i przestał działać ;/

Jeżeli wrzucam do do folderu z exe to z jak włączam z CodeBloks nie odnajduje pliku, a jak przez .exe to się wiesza  ("program quiz.exe przestał działać".). I odwrotnie. Zmiana ścieżki również nic nie daje.
komentarz 5 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Otwórz "Notatnik", utwórz plik "quiz.txt", i wpisz jakąś prostą cyfrę lub tekst. Zobacz czy plik się otwiera.
komentarz 5 lutego 2018 przez AgaLuk Nowicjusz (210 p.)
Tak, otwiera.
komentarz 5 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Czyli z otwieraniem pliku jest wszystko w porządku.

Jeśli problem, który opisałaś nadal występuje to znaczy, że jest jakiś "chochlik" w samym tekście quiz'u. Żeby go znaleźć, wpisuj kolejne, pojedyncze pytania, czy moduły, i patrz co się dzieje.
komentarz 5 lutego 2018 przez AgaLuk Nowicjusz (210 p.)

Zrobiłam od nowa quiz (który jest  pozbawiony sensu) i mi otworzył. Może CodeBlocks nie lubi tematyki psiejindecision? Dziękuję za pomoc w każdym razie :) 

komentarz 5 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Dobry żart !  Code Blocks to porządne narzędzie (IDE).

Czasem (choć b.rzadko) w programowaniu zdarzają się takie niewytłumaczalne dziwactwa.

Jeśli chcesz znaleźć ten błąd, postępuj jak zaproponowałem.
komentarz 5 lutego 2018 przez AgaLuk Nowicjusz (210 p.)
Ok. Przekleiłam cały tekst z mojego oryginalnego quizu do quizu "bezsensownego" i w końcu odczytał! Pewnie nie ma to znaczenia, ale nie wyświetlał mi się nick i tytuł quizu więc dołożyłam do pętli jeszcze warunek if, żeby się wyświetlało.

Teraz badam o co chodzi, bo cały czas wyświetla odpowiedzi z drugiego pytania (aczkolwiek poprawne są te, które zaznaczyłam)
komentarz 5 lutego 2018 przez AgaLuk Nowicjusz (210 p.)
Już wszystko rozwikłałam :) Działa jak ta lala :)

Dziękuję jeszcze raz bardzo za pomoc :)

Pozdrawiam!
komentarz 5 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Ok! Bardzo się cieszę.

Sleep well.

Podobne pytania

–1 głos
4 odpowiedzi 724 wizyt
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 10 stycznia 2017 w C i C++ przez kroliczysyn Początkujący (390 p.)
0 głosów
3 odpowiedzi 787 wizyt
pytanie zadane 23 października 2017 w C i C++ przez kris6700 Początkujący (260 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 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!

...