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

Kurs C++ odcinek 7 Pliki tekstowe.

0 głosów
472 wizyt
pytanie zadane 1 listopada 2015 w C i C++ przez GameFreak Początkujący (450 p.)

Witam

Mam problem z otworzeniem kursu Pana Mirosława Zelenta. Pobrałem z blogu plik quiz.txt i przeniosłem go do folderu D:\CodeBlocks\Quiz\. 

Moj kod wyglada identycznie(przynajmniej tak mi się wydaję :P), a w konsoli wypisuję mi jakieś głupoty.

#include <iostream>
#include <cstdlib>
#include <fstream>
#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_lini;
    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_lini)
        {
            case 1: temat = linia;                break;
            case 2: nick = linia;                 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[nr_pytania] = linia; break;
        }

        if(nr_lini==8)
        {
            nr_lini = 2;
            nr_pytania++;
        }
        nr_lini++;
    }
    plik.close();

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

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

        transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(), ::tolower);//Zamiana liter duzych na male trzeba dodac biblioteki algorithm i string

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

    cout<<endl<<"Koniec quizu! Zdobyte punkty: "<<punkty;

    return 0;
}

 

Prosiłbym o pomoc gdyż dopiero zaczynam swoją przygodę z programowaniem. Z góry DZIĘKI !!! 

2 odpowiedzi

+3 głosów
odpowiedź 1 listopada 2015 przez Krawiec91 Pasjonat (19,600 p.)

Błąd jest w liniach 57-60. Poprawiony fragment:
 

        cout<<"A. "<<odpA[i]<<endl;
        cout<<"B. "<<odpB[i]<<endl;
        cout<<"C. "<<odpC[i]<<endl;
        cout<<"D. "<<odpD[i]<<endl;

Kilka zdań wyjaśnienia. odpA, odbB, odpC, odpD są tablicami typu string. Aby odwołać się do elementów znajdujących się w nich, trzeba wskazać, który to ma być element, np. odpA[0], odpC[2]. W kodzie, który umieściłeś użyty jest zapis odpA, odpB, odpC, odpD, są to nazwy tablic, a zarazem wskaźniki (zmienne wskazujące adres zmiennej) na ich pierwsze elementy, dlatego w konsoli zamiast proponowanych odpowiedzi pojawiły się adresy w formie szesnastkowej.

komentarz 1 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)

Nie był to zaawansowany błąd. Niestety pokazuje to lenistwo dzisiejszych początkujących programistów. Jak teraz mają problemy, to co później sad

+2 głosów
odpowiedź 1 listopada 2015 przez jeremus Maniak (59,720 p.)
oprócz tego nie zaincjalizowałeś zmiennej :

int nr_linii=1;

Podobne pytania

0 głosów
2 odpowiedzi 468 wizyt
pytanie zadane 24 stycznia 2016 w C i C++ przez RedMartin Użytkownik (640 p.)
0 głosów
2 odpowiedzi 562 wizyt
pytanie zadane 16 maja 2015 w C i C++ przez MshL Początkujący (270 p.)
0 głosów
2 odpowiedzi 926 wizyt
pytanie zadane 27 marca 2020 w C i C++ przez toja123321 Nowicjusz (220 p.)

93,720 zapytań

142,646 odpowiedzi

323,266 komentarzy

63,270 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...