如何初始化文本并将文本传递给类数组以便在c ++中输出?

时间:2017-07-26 19:53:22

标签: c++ arrays class

我班级的一项任务是在文本文件中阅读问题,答案和正确的号码。我不确定我的文件读取不正确,但由于某种原因,我没有从初始化函数传递给我的类文件。

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)     

1 个答案:

答案 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/