我在一个入门C++课上,所以我对此完全陌生,但我似乎在运行时遇到以下代码的段错误(剥离到我认为问题所在):
int main(int argc, char *argv[])
{
string filename;
ifstream infile;
float average;
int const ARRAY_SIZE = 20;
int count = 0;
string responses[ARRAY_SIZE];
string response;
char grade;
welcome();
splash();
cout << showpoint << setprecision(1) << fixed;
cout << "nnnnnnnnnnn"
<< "ttEnter 8-Ball response file name: ";
cin >> filename;
infile.open(filename.c_str());
system("CLS");
cout << "score";
cout << "nnnn";
if (infile)
{
while (!infile.eof())
{
infile >> response;
if (1==1)
{
responses[count] = response;
count ++;
}
}
infile.close();
}
cout << "nnn";
system("PAUSE");
return 0;
}
那里有一些额外的行、变量等,只是因为它是从各种旧程序中拼凑出来的,我没有包含函数,因为这不是问题所在。基本上,每当我输入文件名时,都会出现段错误。它打印"score",所以在那之后,我尝试去掉 if 部分,但它仍然让我感到悲伤,所以看起来问题出在 while 语句中的代码上。我们没有详细讨论过段错误,所以我什至不知道从哪里开始搜索这个问题。
你硬编码了数组大小,它是否有可能超过这个限制?
因此,如果您的响应可以动态增长,请按如下方式声明一个向量
#include<vector>
std::vector<std::string> responses;
并按如下方式更正您的循环:
while (infile >> response;)
{
responses.emplace_back(response);
count ++;
}
infile.close();