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

question-closed Quiz,odczyt pliku, nie wyświetla kolejnych pytań

Object Storage Arubacloud
0 głosów
140 wizyt
pytanie zadane 20 stycznia 2017 w C i C++ przez megadeth1216 Nowicjusz (150 p.)
zamknięte 20 stycznia 2017 przez megadeth1216

Witam wszystkich mam problem z quizem z 7 odc kursu pana mirosława zelenta. Mianowicie problem z odczytem treści pytań. 1 pytanie quzu zostaje wyświetlone natomiast kolejne już nie... widać tylko odpowiedzi A,B,C,D natomiast treści pytań nie widać.

Jest jeszcze jedna rzecz mianowicie z pliku quiz.txt usunąłem dwa ostatnie pytania.Teraz mam trzy pytania jak widać poniżej zmieniłem tez odpowiednio rozmiar tablicy- są dla 3 pytan nie 5 jak jest w odc kursu.Czy w związku z tą zmianą mogą wystepować problemy  z getline oraz z ifem od nr linii ? Proszę o pomoc nie o gotowy kod lepsze będzie wytłumaczenie mi w czym problem

using namespace std;

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


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

    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<=2; i++)
    {
        cout<<endl<<tresc[i]<<endl;
        cout<<"A. "<<odpA[i]<<endl;
        cout<<"B. "<<odpB[i]<<endl;
        cout<<"C. "<<odpC[i]<<endl;
        cout<<"D. "<<odpD[i]<<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<<"Koniec quizu. Zdobyte punkty: "<<punkty;

    return 0;
}

 

komentarz zamknięcia: Problem rozwiązany
komentarz 15 lutego 2017 przez Florek Nowicjusz (210 p.)

Za pierwszym razem miałem ten sam problem, pierwsze pytanie działało a przy kolejnych wyświetlały się tylko odpowiedzi i nie naliczało punktów. (Kod miałem identyczny jak Twój). Teraz próbuję znowu zrobić to zadanie i wczytuje mi ostatnie pytanie z listy a kolejne nadal się nie pojawiają. To mój kod:

#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<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }

    while (getline(plik,linia))
    {
        switch (nr_linii)
        {
            case 1: temat=linia; break;
            case 2: nick=linia; break;
            case 3: tresc [0]=linia; break;
            case 4: odpA [0]=linia; break;
            case 5: odpB [0]=linia; break;
            case 6: odpC [0]=linia; break;
            case 7: odpD [0]=linia; break;
            case 8: poprawna [0]=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[i]<<endl;
        cout<<"B. "<<odpB[i]<<endl;
        cout<<"C. "<<odpC[i]<<endl;
        cout<<"D. "<<odpD[i]<<endl;

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

        transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(), ::tolower);
      
        if (odpowiedz[0]==poprawna[i][0])
        {
            cout<<"Dobrze! Zdobywasz punkt!";
            punkty++;
        }
        else cout<<"Zle! Brak punktu! Poprawna odpowiedz: "<<poprawna[i]<<endl;

    }

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

    return 0;
}

Wiem, że w tym fragmencie w kodzie Pana Mirka w nawiasach kwadratowych jest [nr_pytania] ale kiedy próbowałem tak samo zrobić u siebie całkowicie mi nic nie działało.

case 1: temat=linia; break; 
case 2: nick=linia; break;
case 3: tresc [0]=linia; break; 
case 4: odpA [0]=linia; break; 
case 5: odpB [0]=linia; break; 
case 6: odpC [0]=linia; break; 
case 7: odpD [0]=linia; break; 
case 8: poprawna [0]=linia; break;

 

1 odpowiedź

0 głosów
odpowiedź 20 stycznia 2017 przez Michał Muzyka Pasjonat (24,080 p.)
wybrane 20 stycznia 2017 przez megadeth1216
 
Najlepsza
string tresc[2];
string odpA[2],odpB[2],odpC[2],odpD[2];
string poprawna[2];

to są tablice 2 elementowe tam są 2 elementy 0 i 1

 

Tutaj będą 3 elementy

string tresc[3];

string odpA[3],odpB[3],odpC[3], odpD[3];

string poprawna[3];  

komentarz 20 stycznia 2017 przez megadeth1216 Nowicjusz (150 p.)
Zmieniłem na 3 elemntowe jednak to nie rozwiązało problemu.Ogólnie wydaje mi się... a raczej na pewno problem dotyczy zmniennej: tresc

Jak wspomniałem 1 pytanie quizu normalnie się wyświetla natomiast 2 i 3 już nie

Polecenie:

 }

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

      nr_lini++;

  }

  też jest w porządku mimo że u mnie są 3 pytania a nie jak w kursie 5 więc nie wiem w czym lezy  właściwie problem
komentarz 20 stycznia 2017 przez Michał Muzyka Pasjonat (24,080 p.)
if(nr_lini==8){nr_lini==2; nr_pytania++;}
      nr_lini++;

to zmień na to

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

 

komentarz 20 stycznia 2017 przez megadeth1216 Nowicjusz (150 p.)

Działa elegancko następnym razem będę bardziej zwracał uwagę bo głupi błąd dzięki za pomoc smiley 

Podobne pytania

0 głosów
1 odpowiedź 120 wizyt
0 głosów
2 odpowiedzi 134 wizyt
pytanie zadane 16 kwietnia 2016 w C i C++ przez Murzyn Nowicjusz (170 p.)
0 głosów
1 odpowiedź 194 wizyt

92,539 zapytań

141,382 odpowiedzi

319,480 komentarzy

61,928 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!

...