【问题标题】:C++ multiple char array comparisonC++ 多字符数组比较
【发布时间】:2013-08-21 00:56:22
【问题描述】:

好的,所以我有点被困在这里,真的不知道下一步该做什么。假设用户输入一系列关键答案(A-D),然后让多个学生(数量取决于用户输入)输入他们自己的答案,程序应该将他们的答案与之前输入的答案键进行比较并对每个学生进行评分分别。现在我的问题是,如何将每个学生的答案与数组中的答案键进行比较?到目前为止,这是我的代码

#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;
}

【问题讨论】:

    标签: c++ arrays loops


    【解决方案1】:

    评分非常简单 - 您可以为答案和密钥中的每个匹配项添加一个,如下所示:

    int score = 0;
    for (int i = 0 ; i != NumOfQ ; i++) {
        if (TestAns[i] == StudentAns[i]) {
            score++;
        }
    }
    

    如果您还记得逻辑运算返回“真”时返回 0,“假”时返回 1,那么您可以用更少的代码来完成。

    警告:这可能会使您在同龄人中失去一些可读性,如果您的教授没有对这种简洁印象深刻,甚至会失去一些实际分数:

    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++;
    }
    

    【讨论】:

    • 如何在这个 IF 语句中显示正确和错误的答案?非常感谢您的帮助!
    • @ssj3goku878 在if 分支中,添加类似cout &lt;&lt; "Answer " &lt;&lt; i &lt;&lt; " is correct." &lt;&lt; endl; 的输出语句 添加else 分支,然后写入cout &lt;&lt; Answer " &lt;&lt; i &lt;&lt; " is incorrect." &lt;&lt; endl;
    • 如果你能帮助我,我还有另一个问题,我现在的循环将遍历每个学生并询问他们的答案,直到没有更多学生为止,分数变量将不断增加把所有这些学生的答案都加起来,有没有办法让它只把每个学生加起来,直到用完学生?这些循环太棘手了!
    • @ssj3goku878 是的 - 将变量声明、循环和打印分数的语句放在一起,放在z 的外部循环内。分数将被重置,然后循环将为每个正确答案添加1,然后您将打印分数,然后分数将被遗忘。或者,您可以定义一个数组scores 而不是单个变量score,并使用scores[z]++ 而不是score++
    • @ssj3goku878 你在错误的位置放置了一个花括号,没有将scores[z] 设置为0,并增加了scores[i] 而不是scores[z]
    【解决方案2】:

    将最后一个“for”块替换为:

    StudentScores[z] = 0;
    for (int a = 0; a < NumOfQ; a++){
        cin >> StudentAns[a];
        if (TestAns[a] == StudentAns[a])
            ++StudentScores[z];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-02
      • 2013-12-08
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多