好的,所以我有点卡在这里有一个作业,真的不知道接下来该做什么。用户输入一系列关键答案(AD),然后让多个学生(金额取决于用户输入)输入他们自己的答案,程序应该将他们的答案与之前输入的答案键进行比较并对每个学生进行评分个别。现在我的问题是,如何将每个学生的答案与数组中的答案键进行比较?这是我到目前为止的代码
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int NumOfQ;
int NumOfS;
char TestAns[50];
string StudentNames[50];
int StudentScores[50];
char StudentAns[50];
int score[50];
cout << "Please enter the Number Of Questions\n";
cin >> NumOfQ;
cout <<"\nPlease enter your answers\n";
for(int x = 0; x < NumOfQ; x++){
cin >> TestAns[x];
}
cout <<"\nPlease enter number of students\n";
cin >> NumOfS;
cout <<"\nPlease enter Student's Names\n";
for (int s = 0; s < NumOfS; s++){
cin >> StudentNames[s];
}
for (int z = 0; z < NumOfS; z++){
cout<<"\nStudent: " << StudentNames[z] << " Please enter your test answers\n";
for (int a = 0; a < NumOfQ; a++){
cin >> StudentAns[a];
}
score[z] = 0;
for (int i = 0; i <=NumOfQ; i++){
if(TestAns[i] == StudentAns[i]){
score[z]++;
}
}
}
for(int Z = 0; Z < NumOfS; Z++){
cout <<"\Student : " << StudentNames[Z] << score[Z] << " out of " << NumOfQ << endl;
}
system("PAUSE");
return 0;
}
答案 0 :(得分:3)
评分非常简单 - 您可以在答案和密钥中为每个匹配添加一个,如下所示:
int score = 0;
for (int i = 0 ; i != NumOfQ ; i++) {
if (TestAns[i] == StudentAns[i]) {
score++;
}
}
如果您回想起逻辑操作为“true”返回零,而“false”返回0,则可以使用更少的代码执行此操作。
警告:如果你的教授没有对这种简洁感到印象深刻,这可能会让你在同伴中花费一些可读点,甚至可能会有一些真实点:
int score = 0;
for (int i = 0 ; i != NumOfQ ; i++) {
score += (TestAns[i] == StudentAns[i]);
}
区分大小写是另一个问题:如果答案密钥为c
,用户输入C
该怎么办?上面的代码不会给学生他的辛苦积分,这是错误的。如果强制将两个字符的大小写都放在上面,则混合大小写比较将是正确的:
if (toupper(TestAns[i]) == toupper(StudentAns[i])) {
score++;
}
答案 1 :(得分:1)
将上一个'for'块替换为:
StudentScores[z] = 0;
for (int a = 0; a < NumOfQ; a++){
cin >> StudentAns[a];
if (TestAns[a] == StudentAns[a])
++StudentScores[z];
}