我班级的一项任务是在文本文件中阅读问题,答案和正确的号码。我不确定我的文件读取不正确,但由于某种原因,我没有从初始化函数传递给我的类文件。
void initQuestions(Question q[])
{
ifstream infile; // Input file to read questions into array
infile.open("questions.txt");
int pos; // loop counter
string quest; // variable holding question text
string posAns[numAns]; // variable array holding the possible answers
int corrAns; // variable holding the correct answer
// Error message if file unable to open
if (!infile.good())
{
cout << "Error: Unable to open file!" << endl;
}
while (infile)
{
// Load variables and array from the file using while loop
getline(infile, quest);
for (int i = 0; i < numAns; i++)
getline(infile, posAns[i]);
infile >> corrAns;
for (pos = 0; pos < questNum ; pos++)
{
q[pos].setQuestionText(quest);
q[pos].setPossAnswer1(&posAns[0]);
q[pos].setPossAnswer2(&posAns[1]);
q[pos].setPossAnswer3(&posAns[2]);
q[pos].setPossAnswer4(&posAns[3]);
q[pos].setPossAnswer5(&posAns[4]);
q[pos].setCorrect(corrAns);
getline(infile, quest);
for (int i = 0; i < numAns; i++)
getline(infile, posAns[i]);
infile >> corrAns;
}
}
}
这是我的功能。我在主要使用的电话是:
initQuestions(&quiz[questNum]);
非常感谢任何帮助。感谢。
调试器输出:
0x00007ffff7b8d44b in std::basic_string<char, std::char_traits<char>,
std::allocator<char> >::basic_string(std::strin
g const&) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) continue
Continuing.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb)
答案 0 :(得分:0)
如何从主电源调用该功能存在一些问题。
首先,当你传递数组时,你必须传递数组及其大小,其次,数组通过c ++中的引用传递,所以你不想要&
所以:
主:
initQuestions(quiz , questNum);
您的方法声明也必须更改:
void initQuestions(Question q[], int size)
有关传递数组的帮助,请参阅: https://www.tutorialspoint.com/cplusplus/cpp_passing_arrays_to_functions.htm
同样在读取文件时,您应该逐行阅读并检查while循环中的行是否仍然良好。您正在检查文件本身是否良好。
您在文件中阅读时有很多值得怀疑的内容,因此我强烈建议您查看此资源以获取示例: http://www.cplusplus.com/doc/tutorial/files/