Witam,
bardzo proszę o pomoc, ponieważ najprawdopodobniej źle zbudowałem warunek if. Program powinien wylosować 1-4 pytanie z puli pytań o trudności 1, 5-8 pytanie z puli o trudności 2 itd., a losuje z całości.
#include <stdio.h>
#include <cstdlib>
#include <string>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <algorithm>
#include <windows.h>
#include <time.h>
using namespace std;
struct baza_pytan
{
string poziom;
string pytanie;
string odpowiedz1;
string odpowiedz2;
string odpowiedz3;
string odpowiedz4;
string poprawna;
};
int main()
{
int losowanie[12];
int nr_pytania=0, licznik=1, nr_linii=1, wylosowane=0, l=0, poprawne=0;
string linia, odpowiedz;
bool flaga;
//Sprawdzenie ilosci pytan w pliku
fstream plik;
plik.open("pomiary.txt", ios::in);
while(!plik.eof())
{
getline(plik, linia);
licznik++;
}
licznik= licznik/7;
plik.close();
cout<<"Ilosc pytan w puli: "<<licznik<<endl<<endl;
//Przepisanie pytan z pliku do struktury
baza_pytan pytanie[licznik];
plik.open("pomiary.txt", ios::in);
while(getline(plik,linia))
{
switch(nr_linii)
{
case 1: pytanie[nr_pytania].poziom = linia; break;
case 2: pytanie[nr_pytania].pytanie = linia; break;
case 3: pytanie[nr_pytania].odpowiedz1 = linia; break;
case 4: pytanie[nr_pytania].odpowiedz2 = linia; break;
case 5: pytanie[nr_pytania].odpowiedz3 = linia; break;
case 6: pytanie[nr_pytania].odpowiedz4 = linia; break;
case 7: pytanie[nr_pytania].poprawna = linia; break;
}
if (nr_linii==7)
{
nr_linii=0;
nr_pytania++;
}
nr_linii++;
}
plik.close();
//Losowanie pytan!!!
srand(time(NULL));
for(int i=0; i<12;i++)
{
do
{
l=rand()%licznik;
flaga=true;
for (int j=0; j<=wylosowane; j++)
{
if ((poprawne<5 && pytanie[l].poziom!="1" || l==losowanie[j]) || (poprawne>4 && poprawne<9 && pytanie[l].poziom!="2" || l==losowanie[j]) || (poprawne>8 && poprawne<12 && pytanie[l].poziom!="3" || l==losowanie[j]))
flaga=false;
}
if(flaga=true)
{
losowanie[wylosowane]=l;
wylosowane++;
}
}while(flaga!=true);
cout<<"Pytanie nr "<<i+1<<":"<<endl;
cout<<pytanie[l].pytanie<<endl;
cout<<"A. "<<pytanie[l].odpowiedz1<<endl;
cout<<"B. "<<pytanie[l].odpowiedz2<<endl;
cout<<"C. "<<pytanie[l].odpowiedz3<<endl;
cout<<"D. "<<pytanie[l].odpowiedz4<<endl<<endl;
cout<<"Twoja odpowiedz (wpisz a-d): ";
cin>>odpowiedz;
transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower);
if (odpowiedz==pytanie[l].poprawna)
{
cout<<"Dobrze! Przechodzisz dalej!"<<endl<<endl;
poprawne++;
getchar();getchar();
system("cls");
}
if (odpowiedz!=pytanie[l].poprawna)
{
cout<<"Zle! Poprawna odpowiedz: "<<pytanie[l].poprawna<<endl;
getchar();
break;
}
}
return 0;
}
Zawartość pliku tekstowego:
1
Jakiego koloru jest czerwony maluch?
Bialy
Zielony
Niebieski
Czerwony
d
1
Jakiego koloru jest zielony maluch?
Bialy
Zielony
Niebieski
Czerwony
b
1
Jakiego koloru jest bialy maluch?
Bialy
Zielony
Niebieski
Czerwony
a
1
Jakiego koloru jest niebieski maluch?
Bialy
Zielony
Niebieski
Czerwony
c
2
Typ zmiennych o nazwie float przechowuje:
liczby calkowite
napisy
liczby zmiennoprzecinkowe
pojedyncze znaki
c
2
Wstrzymanie wykonania programu na czas 2 sekund uzyskasz instrukcja:
Wait(2000)
Stop(2000)
Delay(2000)
Sleep(2000)
d
2
Ktora deklaracja jest zapisana poprawnie?
int x;
integer x;
x:integer;
x=integer;
a
2
Z jakiego przedzialu zostanie wylosowana liczba: rand()%10+2
0..9
2..9
2..11
0..11
c
3
Ile razy wykona sie petla: for (int i=4; i>=-2; i--)
ani razu
nieskonczenie wiele razy
6
7
d
3
Ile metrow ma kilometr?
100
1000
10000
sporo
b
3
Ile wynosi 2+2*2
6
8
222
2
a
3
Jakas nowa tresc
odp a
odp b
odp c
odp d
a
dodanie znacznika <code class="none">
- @furious programming