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

Quiz z pliku tekstowego- niewidoczne pytania

Object Storage Arubacloud
0 głosów
1,150 wizyt
pytanie zadane 7 października 2015 w C i C++ przez Adam Jakś Dyskutant (8,940 p.)

Witam, zrobiłem quiz a'la ten z odcinka 7 kursu c++ o plikach tekstowych.

Gdzieś coś musiałem przeoczyć, ponieważ nie widać tekstu z pliku.

Tutaj kodzik:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <windows.h>
#include <algorithm>
#include <string>

using namespace std;

string topic, author;
string question[5], anA[5], anB[5], anC[5], anD[5];
string correct[5];
string answer;
int points=0;
int main()
{
    int line_nr=1,que_nr=0;
    string line;
    fstream file;


    file.open("quiz.txt", ios::in);

    if (file.good()==FALSE)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
        cout<< "Nie mozna odczytac pliku";
        exit(0);
    }

    while (getline(file,line))
    {
        switch(line_nr)
        {
            line_nr++;
            case 1:topic=line;break;
            case 2:author=line;break;

            case 3:question[que_nr]=line;break;
            case 4:anA[que_nr]=line;break;
            case 5:anB[que_nr]=line;break;
            case 6:anC[que_nr]=line;break;
            case 7:anD[que_nr]=line;break;
            case 8:correct[que_nr]=line;break;

            if(line_nr=8)
            {
             line_nr=2; que_nr++;
            }
        }
    }

    file.close();
    file.clear();

    for (int i=0;i<=4;i++)
    {
    cout<< question[i] <<endl<< "A: " << anA[i] <<endl<< "B: " << anB[i] <<endl<< "C: " << anC[i] <<endl<< "D: " << anD[i]
    <<endl<< "Twoja odpowiedz: " << answer;
    transform(answer.begin(),answer.end(),answer.begin(), ::tolower);


    if (answer==correct[i]) {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
        cout<< endl << "Prawidlowo.";
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
        points++;
    } else {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
        cout<< "Blad! Poprawna odpowiedz to " << correct[i] <<endl;}
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
    }

    cout<< endl << "The end. Zdobyte punkty: " << points;
    return 0;
}

A tutaj- jak powinno to prawidłowo wyglądać:

https://youtu.be/h2Taf16gQDI?t=20m40s

Będę wdzięczny za pomoc w poprawnym działaniu programu.

Pozdrawiam.

3 odpowiedzi

0 głosów
odpowiedź 7 października 2015 przez emSon Stary wyjadacz (10,480 p.)

Spróbuj to:

line_nr++;

umieścić po ifie i switchu, a nie na jego początku. Albo ewentualnie pierwszą wartość tej zmiennej ustaw na 0.

0 głosów
odpowiedź 24 stycznia 2016 przez dzikibaran Nowicjusz (140 p.)

Witam,

ani plik pobrany ze strony, ani to, co stworzyłem zgodnie z tutorialem nie pozwala mi zobaczyć więcej, niż tylko pierwszego pytania:

#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: "<<endl;
        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<<"Razem zdobytych punktow: "<<punkty;

    return 0;
}

 

komentarz 24 stycznia 2016 przez Adrian1999 Nałogowiec (34,570 p.)
Jeżeli mogę, mógłbyś dać mi jeszcze swój plik txt? Jestem aktualnie takim leniem że mi się nie chce, a chętnie bym pomógł jakoś.. A żeby stworzyć własny musiałbym wyczytać zasadę działania, i jak nie zadziała myśleć czy to moja wina czy txt
komentarz 24 stycznia 2016 przez dzikibaran Nowicjusz (140 p.)
Temat
Mirosław Zelent
Typ zmiennych o nazwie float przechowuje:
liczby calkowite
napisy
liczby zmiennoprzecinkowe
pojedyncze znaki
c
Wstrzymanie wykonania programu na czas 2 sekund uzyskasz instrukcja:
Wait(2000)
Stop(2000)
Delay(2000)
Sleep(2000)
d
Ktora deklaracja jest zapisana poprawnie?
int x;
integer x;
x:integer;
x=integer;
a
Z jakiego przedzialu zostanie wylosowana liczba: rand()%10+2
0..9
2..9
2..11
0..11
c
Ile razy wykona sie petla: for (int i=4; i>=-2; i--)
ani razu
nieskonczenie wiele razy
6
7
d

 

komentarz 24 stycznia 2016 przez Adrian1999 Nałogowiec (34,570 p.)

błąd jest prosty -_- zauważ że wpisujesz wartość tylko tabeli o indeksie 0 a w pętli masz tych indeksów 4, i zmienna nr_pytania jest nieużyta 

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <Windows.h>

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[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_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: " << endl;
		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 << "Razem zdobytych punktow: " << punkty;
	system("Pause");
	return 0;
}

 

komentarz 24 stycznia 2016 przez dzikibaran Nowicjusz (140 p.)
Dziękuję,

nawet podobnie kombinowałem, tylko próbowałem podstawić tam string 'tresc' (bo się nie wyświetlała:D)
komentarz 24 stycznia 2016 przez Adrian1999 Nałogowiec (34,570 p.)
Spokojnie, powiem ci szczerze że ja pierwszy raz rozwiązałem ten problem.. Bo też miałem ten kłopot kiedyś, programuje już od jakiś półtorej roku... Aktualnie tworzę cms-a a w c++ jestem od czasu do czasu, i jakoś coś przypomina się :D Po przerwie się nawet ma lepszy łeb do rozwiązywania takich zadań
0 głosów
odpowiedź 24 stycznia 2016 przez Adrian1999 Nałogowiec (34,570 p.)
edycja 24 stycznia 2016 przez Adrian1999

ts ts ts, przypomnij sobie jaki znak co oznacza ,,=" oznacza przypisanie wartości ,,==" sprawdzenie równości zrobiłeś minimalny błąd, który często się zdarza napisałeś 

      if(line_nr=8)
            {
             line_nr=2; que_nr++;
            }

zamiast 

      if(line_nr==8)
            {
             line_nr=2; que_nr++;
            }

zobacz czy działa

w dodatku, switch zamknięty w złym miejscu if nie jest elementem switcha, oraz inkrementacja ma być na końcu nie na początku kodu

 

Milionowy raz edit, nie masz systemu sprawdzania czy odpowiedź jest poprawna, a co lepiej, nie masz systemu który wogóle pozwala wprowadzić jakąś odpowiedź.. Zgaduje program zamyka ci się po sekundzie..

Podobne pytania

+1 głos
2 odpowiedzi 205 wizyt
pytanie zadane 29 października 2017 w C i C++ przez kris6700 Początkujący (260 p.)
+1 głos
2 odpowiedzi 652 wizyt
pytanie zadane 26 kwietnia 2017 w PHP przez nielotweb Bywalec (2,240 p.)
0 głosów
1 odpowiedź 120 wizyt
pytanie zadane 7 września 2015 w C i C++ przez lbogacz Nowicjusz (200 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

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

...