好吧,我已经能够简单地编写代码了。我目前的问题是处理输出。循环结构包括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;
}
}
答案 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
都不等于A
或B
,该怎么办?
其次,我认为您希望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'是非空的。你也错过了字母旁边的引号来表示它是一个角色。
答案 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”也说了同样的话,哎呀。好吧,至少你现在还记得。