当前位置: 动力学知识库 > 问答 > 编程问答 >

c++ - I'm getting a "subscript out of range error" everytime I debug this code. Can someone please help me pinpoint the error or errors?

问题描述:

I've checked all my strings and arrays. Nothing looks wrong to me. My include statements may be the problem. Perhaps I am missing one. I'm am a novice programmer. So I am clueless as to why this code will not work. It looks right and should absolutely work.

#include<iostream>

#include<cstdlib>

#include<ctime>

#include<fstream>

#include<string>

using namespace std;

int main()

{

int i;

char response;

char answers[20];

char uresponse[20];

int score=0;

srand(time(0));

int test_num = rand() % 2+1;

// cout << test_num << endl;

if (test_num == 1)

{

string line;

ifstream myfile ("form1.txt");

getline (myfile,line);

// cout<< line<<endl;

for (int i = 0; i <= 19; i++)

{

answers[i] = line[i*2];

// cout<<answers[i]<<endl;

}

getline (myfile,line);

if ( myfile.is_open())

{

int x = 0;

while ( myfile.good() )

{

char answers[20];

string line;

getline (myfile,line);

// cout<< line << endl;

if( line == "")

{

cout << "Enter answer: ";

cin >> response;

if(response == 'a', 'A' || response == 'b', 'B' || response == 'c', 'C' || response == 'd', 'D')

{

response = response;

}

else

{

cout << "ERROR. You must enter A, B, C, or D. Please re-enter: ";

cin >> response;

}

response = toupper(response);

uresponse[x] = response;

x++;

}

}

// cout << uresponse <<endl;

// system("pause");

}

else

{

myfile.close();

}

}

else

{

string line;

ifstream myfile ("form2.txt");

getline (myfile,line);

// cout<< line<<endl;

for (int i = 0; i <= 19; i++)

{

answers[i] = line[i*2];

// cout<<answers[i]<<endl;

}

getline (myfile,line);

if ( myfile.is_open())

{

int x = 0;

while ( myfile.good() )

{

char answers[20];

string line;

getline (myfile,line);

// cout << line << endl;

if( line == "")

{

cout << "Enter answer:";

cin >> response;

if(response == 'a', 'A' || response == 'b', 'B' || response == 'c', 'C' || response == 'd', 'D')

{

response = response;

}

else

{

cout << "ERROR:You must enter A, B, C, or D. Please re-enter:";

cin >> response;

}

response = toupper(response);

uresponse[x] = response;

x++;

}

}

// cout<<uresponse<<endl;

// system("pause");

}

else

{

myfile.close();

}

}

for (int j=0; j<20; j++)

{

if (answers[j] == uresponse[j])

score += 1;

}

if(score >15)

{

cout << "CONGRATULATIONS! You Passed with a score of ";

cout << score << endl;

system("pause");

}

else

{

cout<< "You Failed with a score of ";

cout << score << endl;

system("pause");

}

system("pause");

return 0;

}`enter code here`

网友答案:

This could be the culprit:

answers[i] = line[i*2];

Are you certain i*2 is not >= line.size()?

Btw, this code looks dodgy:

if(response == 'a', 'A' || response == 'b', 'B'
 || response == 'c', 'C' || response == 'd', 'D')
{
     response = response   
}

Perhaps you want to use a switch and initializing response to itself.. why?

EDIT: And your while(myfile.good()) That probably executes 100 times and you keep incrementing x It's hard to say in your code.. you have a lot of "dodgy" lines :P

分享给朋友:
您可能感兴趣的文章:
随机阅读: