C ++考试平地机

时间:2013-12-11 04:54:08

标签: c++ arrays

好吧,我已经能够简单地编写代码了。我目前的问题是处理输出。循环结构包括5个学生,但数字元素重置像百分比和回答错误。同样在错过部分的问题结束时,我必须添加正确的答案。我们的教授给了我们两个函数来完成这个,我只是不明白如何正确实现它们。该代码未发布,但如果有人有兴趣帮助解决该问题,我很乐意发布它。

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <sstream>
#include <cstdio>
using namespace std;

int main()
{
    int z = 0;
    const int WRONGQUESTIONS = 20;
    int wrongCounter[WRONGQUESTIONS];
    const int QUESTIONS = 20; 
    const int STUDENT_QUESTIONS = 100;
    ifstream inputFile;
    inputFile.open("CorrectAnswers.txt");
    char correctAnswers[QUESTIONS];
    for (int i=0; i<20; i++)
    {
        inputFile >> correctAnswers[i]; 
    }

    ifstream inputFile2;
    inputFile2.open("StudentAnswers.txt");
    char studentAnswers[STUDENT_QUESTIONS];
    for (int t=0; t<STUDENT_QUESTIONS; t++)
    {
        inputFile2 >> studentAnswers[t];
    }

int answeredCorrectly = 0;
for(int c = 0; c < 5; c++)
    {
        int z = 0;
    //now we use a for loop to go through the questions and store whether the answer was right or wrong
    for (int x = 0; x < QUESTIONS; x++)
        {      

            if (studentAnswers[x] == correctAnswers[x])
                answeredCorrectly++;
            else
                wrongCounter[z]++;
            z++;
        }
                cout << "Report for Student " << c+1 << ":" << endl;
                cout << "---------------------" << endl;
                cout << "Missed " << 20 - answeredCorrectly << " out of 20 questions for " << (answeredCorrectly / 20) * 100 << "% correct." << endl;
                cout << "Answered Correctly:  " << answeredCorrectly << endl;
                cout << "Questions missed:" << endl << endl;

    }
}

4 个答案:

答案 0 :(得分:2)

我想我发现 一个问题

while (badEntry = true)

使用==

while (badEntry == true)

还有其他问题

while (badEntry = true)
{
        cout << "Invalid entry" << endl;// I GET AN INFINATE LOOP HERE????
        if (studentAnswers[x] == A || B)
                badEntry = false;
}

首先,如果studentAnswers都不等于AB,该怎么办?

其次,我认为您希望if条件成为以下

if (studentAnswers[x] == A || studentAnswers[x] == B)

答案 1 :(得分:0)

你在“while(badEntry = true)”中错过了一个“=”。应该是“while(badEntry == true)”。事实上,你可以做“while(badEntry)”。

“if(studentAnswers [y] ='N')”的错误。

为了避免这些问题,你应该始终把常量放在第一位。例如,执行“if('N'== studentAnswers [y])”。

答案 2 :(得分:0)

一些问题:while (badEntry = true)每次检查条件时都会将badEntry设置为true。所以最终检查while(true)(又称无限循环)。正如其他人所说,请改用while(badEntry)

此外,if (studentAnswers[x] == A || B)也不正确。它应该是:if ( (studentAnswers[x] == 'A') || (studentAnswers[x] == 'B') )

此外,if (studentAnswers[x] == 'A' || 'B')被解释为: if ( (studentAnswers[x] == 'A') || ('B') )每次都会变为真,因为'B'是非空的。你也错过了字母旁边的引号来表示它是一个角色。

您可能会发现这有用:http://www.cplusplus.com/forum/articles/3483/

答案 3 :(得分:0)

这不是主要问题,其他人已经发布了真正的问题。但是,这也会使您的程序无法正常工作。

if (studentAnswers[x] != A || B)是一个有趣的条件。

我想你正在测试 studentAnswers [x] 是否不等于 A B
你不能用C ++或者(我所知道的)大多数语言来说这个。

您的语句将解析为if((studentAnswers[x] != A) || B)。(!=||之前出现在二元运算符优先级中。要解决此问题,只需为A和B创建一个!=检查。

它应如下所示:if (studentAnswers[x] != A || studentAnswers[x] != B)
==也是如此。


只是抬头看到“我是我的山姆”已经把它放在他的答案中了。对此感到抱歉。
无论如何,要警惕你的布尔测试,这似乎是搞砸了程序的大部分内容。

编辑:看起来像“TonyArra”也说了同样的话,哎呀。好吧,至少你现在还记得。