我无法弄清楚我的代码出了什么问题。我使用添加监视来确保正确读取信息并将其输入到数组中。我得到的错误是:
访问冲突写入位置。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
//string name;
//double id = 0;
int numQ = 0;
int numA = 0;
string temp;
string arrayQ[50];
string arrayA[50];
fstream SaveFile;
SaveFile.open("TestBank.txt", ios::in);
while (!SaveFile.eof())
{
getline(SaveFile, temp, '#');
if (temp.length() > 5)
{
arrayQ[numQ] = temp;
numQ++;
}
else
{
arrayA[numA] = temp;
numA++;
}
}
SaveFile.close();
cout << "The question is\n" << arrayQ[0] << endl;
cout << "The answer is\n" << arrayA[0] << endl;
return 0;
}
最佳答案
首先,您不应该在C ++中循环使用eof。
然后,应确保numQ
和numA
不会超出范围,因为它们的值取决于文件内容:
...
while (getline(SaveFile, temp, '#'))
{
if (temp.length() > 5)
{
if (numQ>=50)
cerr << "Ouch ! numQ=" <<numQ<<endl;
else arrayQ[numQ] = temp;
numQ++;
}
else
{
if (numA>=50)
cerr << "Ouch ! numA=" <<numA<<endl;
else arrayA[numA] = temp;
numA++;
}
}
最后,您可以考虑使用
vector<string>
代替字符串数组。在这种情况下,您只需在正确的向量中push_back()
字符串,而不必担心预定的大小。关于c++ - 访问冲突写定位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36166722/