输出一个数组,它会跳过一个元素

时间:2015-03-20 03:48:50

标签: c++ arrays visual-studio-2012

所以我会说实话,我对编程非常陌生,而且我已经阅读了其他具有相同主题的电路板,我无法找到可能搞乱的地方。

对于我的程序,我将多选测验的文本文件输入到两个不同的数组中。一个数组包含测验问题和多项选择答案(因此它是一个2D数组),而另一个数组包含答案。然后将这些输出给用户,用户可以进行测验,然后在结束时获得测验结果。

所以我可能已经完成了最基本的调试,即逐步完成我的程序并确保我的文件正确加载到我的数组中(它确实如此)所以我不认为这是将文件加载到数组中的问题,但他们是如何输出的。

那么我的问题是什么?

当我开始输出我的测验并且用户开始接受它时,第一个问题就出现了问题(以及多项选择答案)并且答案是正确的,但是当它转到第二个问题时跳过并输出第三个问题,但仍然输出问题2的多项选择答案,这会导致整个测试失败。所以基本上它输出数组[2] [0]然后输出第1行中的其余元素,而不是数组[1] [0],然后输出第1行中的其余元素。所以所有的问题都是关闭的之一。

有没有人有任何想法为什么它只是跳过数组的一个元素但是读出其他一切就好了?感谢您的帮助!

下面是文本文件的示例。

  

集成开发环境通常包括:
  文本编辑器
  编译器
  调试器
  以上所有
  以上都不是   D

它继续。文件中总共有12个问题,行之间没有多余的空格。

下面是我的代码的循环,所有内容都已声明并初始化。

int countRow = 0;                   //Counter for the rows in the array
    int countCol = 0;               //Counter for the columns in the array
    const int ARRAY_ROW = 11;           //Rows in the array
    const int ARRAY_COL = 6;            //Columns in the array
    string line;                    //String variable to put into the array

    //Filling the 2D array and the answer array
    for (countRow = 0; countRow < ARRAY_ROW; countRow++)
    {
        for (countCol = 0; countCol < (ARRAY_COL); countCol++)
        {
            getline(inFile, line);
            testArr[countRow][countCol] = line;
        }

        //Filling the answer array
        if (countCol == 6)
        {
            getline(inFile, line);
            testAnswers[countRow] = line;
        }

    }


    string choice;              //Variable for user input
    string answer;              //Variable for the correct answer
    int rightAnswer = 0;        //Accumulator for the right answer
    int row = 0;                //Counter for rows
    int col = 0;                //Counter for columns
    int questionNum = 1;        //Number of the question
    char option = 'A';          //Lettering options for the user to choose from


    cout << "Select the appropriate option for your desired answer." << endl;
    cout << endl;
    cout << endl;

    for (row = 0; row < ARRAY_ROW; row++)
    {
        cout << "Question " << questionNum << ": " << testArr[row][col] << endl;
        cout << endl;
        questionNum++;

        for (col = 1, option = 'A'; col < ARRAY_COL, option < 'F'; col++, option++)
        {
            cout << option << " - " << testArr[row][col] << endl;
        }

        cout << endl;
        answer = testAnswers[row];
        cin >> choice;
        cout << endl;

        if (choice == answer)
        {
            cout << "Correct, you chose the right answer: " << answer << endl;
            cout << endl;
            cout << endl;
            rightAnswer++;
        }

        else
        {
            cout << "Incorrect, the correct answer is: ";
            cout << answer << endl;
            cout << endl;
            cout << endl;
        }
    }

1 个答案:

答案 0 :(得分:0)

由于您的问题存储在&#39;列&#39; 0,

变化:

cout << "Question " << questionNum << ": " << testArr[row][col] << endl;

要:

cout << "Question " << questionNum << ": " << testArr[row][0] << endl;

在第一次迭代循环打印出问题之后,变量col留下值ARRAY_COL,这对于打印出下一个问题是不正确的。