Mam taki program który ma za zadanie:
- wyświetlać w losowej kolejności pytania pobrane z pliku
- do każdego pytania są 4 warianty odpowiedzi: a, b ,c ,d
- użytkownik podaje poprawne odpowiedzi
- jego odpowiedzi są porównywane z wzorem poprawnych odp.
- wyświetlany jest wynik jaki uzyskał
w pliku pytania i odpowiedzi zapisywane są kolejno wierszami:
pytanie1
p a.warianta1
n b.warianta1
n c.warianta1
p d.warianta1
pytanie2
.
.
literka "p" lub "n" na początku wiersza określa poprawność odpowiedzi(tą właściwą/ nie wskazaną przez użytkownika)
To mój kod, który przy ostatnim pytaniu wysypuję się błędem:
Debugger Expection Notification:
Project raised expception class _STL::out_of_range with message "Exception Object Address: 0xA44D94A". Process stopped.
__stl_throw_out_of_range("basic_string"); - na tą linię w klasie _string.c wskazuje kompilator
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <fstream>
#pragma hdrstop
#include <string>
using namespace std;
void losowanie();
void wczytywanie();
void wzor_poprawne();
void wypelnianie();
void odp_uzytk();
void spr_odp();
const int il_pyt=20;
const int il_odp=5;
string tab_pyt[il_pyt][il_odp];
int tab_kol[il_pyt];
bool tab_pop[il_pyt][il_odp-1];
bool tab_odp[il_pyt][il_odp-1];
string tab_odpo[il_pyt];
int wynik;
int main()
{
losowanie();
wczytywanie();
wzor_poprawne();
//for(int i=0; i<il_pyt; i++)
// tab_odpo[i]="abcd";
wypelnianie();
odp_uzytk();
spr_odp();
cout<<"Twoj wynik: "<<wynik;
system("pause");
}
void wczytywanie(){
ifstream plik;
plik.open( "test.txt", ios::in );
for (int i=0; i<il_pyt; i++){
for (int j=0; j<il_odp; j++){
getline(plik, tab_pyt[i][j]);
}
}
plik.close();
}
void wypelnianie(){
int a=0;
char zmienna;
do{
for (int i=0; i<il_odp; i++){
cout<<tab_pyt[tab_kol[a]][i]<<" "<<endl;
}
cout<<"Podaj poprawne odpowiedzi(w ciagu, w dowolnej kolejnosci): ";
cin>>tab_odpo[tab_kol[a]];
cout<<endl<<"1- nastepne"<<endl;
do{
cin>>zmienna;
system( "cls" );
if(zmienna=='1'){
a++;
}
else
cout<<"zly klawisz! 1- nastepne"<<endl;
}while(zmienna!='1');
//}while(a<il_pyt-15);
}while(a<17);
}
void losowanie(){
// losowanie liczb
srand (time(NULL));
for ( int i = 0 ; i < il_pyt; ){
// wylosowanie liczby
tab_kol[i] = rand() % il_pyt + 0 ;
// sprawdzenie, czy się ona nie powtarza
bool bPowtarzaSie = false ;
for ( int j = 0 ; j < i; ++j){
if (tab_kol[j] == tab_kol[i]){
bPowtarzaSie = true ;
break ;
}
}
// jeżeli się nie powtarza, przechodzimy do następnej liczby
if (!bPowtarzaSie) ++i;
}
}
void wzor_poprawne(){
for (int i=0; i<il_pyt; i++){
for (int j=1; j<il_odp; j++){
string temp(tab_pyt[i][j], 0 , 1);
if(temp=="p")
tab_pop[tab_kol[i]][j]= true;
else
tab_pop[tab_kol[i]][j]= false;
tab_pyt[tab_kol[i]][j].replace(0, 2, "");
}
}
}
void odp_uzytk(){
for(int i=0; i<il_pyt; i++){
for(int j=0; j<il_odp-1; j++){
//string temp(tab_odpo[i], j , 1);
string temp= tab_odpo[i].substr(j, 1);
if(temp=="a")
tab_odp[tab_kol[i]][0]=true;
else
if(temp=="b")
tab_odp[tab_kol[i]][1]=true;
else
if(temp=="c")
tab_odp[tab_kol[i]][2]=true;
else
if(temp=="d")
tab_odp[tab_kol[i]][3]=true;
}
}
}
void spr_odp(){
int spr=0;
for(int i=0; i<il_pyt; i++){
if(spr==3)
wynik++;
spr=0;
for(int j=0; j<il_odp-1; j++){
if(tab_odp[i][j]==tab_pop[i][j])
spr++;
}
}
}
//---------------------------------------------------------------------------
Byłbym wdzięczny za pomoc w rozwiązaniu problemu