使用Arrays进行测试结果

时间:2014-04-16 23:40:39

标签: c++ for-loop

好的,所以我知道你们不是我自己的个人程序员,但我想知道你是否可以在这里帮助我。我在上学的时候是一名教师助理。我知道一些C ++,并试图制作一个基本程序来检查答案。

该程序的第一部分可以很好地测试关键的答案,但第二部分是我遇到的问题。我试图找到有多少学生回答了什么问题所以我不需要手工计算,但我似乎无法解决这个问题。

我真正需要的是能够像这样打印出来:

问题A B C D E

1 1 12 3 5 7

等等。

我知道我可能需要一个嵌套的for循环,但我整晚都在敲打这个问题。任何帮助将不胜感激。

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

void main(){

int numstud=0, numcorrect, i;
string key, id, responses;
ifstream keyfin, studfin;
keyfin.open("answers.dat");
studfin.open("tests.dat");

keyfin >> key;
studfin >> id >> responses;

cout << setw(5) << "Student-Id's" << setw(20) << "# Correct" << endl << endl;

while(!studfin.eof())
{
    numstud++;
    numcorrect=0;
    for(i=0; i<20; i++){

        if(responses[i] == key[i])
        {
            numcorrect++;
        }
    }

    cout << id << setw(20) <<numcorrect << endl;
    studfin >> id >> responses;

}








studfin >> id >> responses;
int col[20][5]={0}, j=0;
char ch;
studfin >> id >> responses;
cout << "Question" << setw(10) << "A" << setw(5) << "B" << setw(5) << "C" << setw        (5) << "D" << setw(5) << "E";

while (!studfin.eof())
{
    for(i=0; i<responses.length(); i++)
    {
        col[i++][responses[i-'a'] ++];

    }


}
}

1 个答案:

答案 0 :(得分:0)

就实现响应的直方图而言,您有一般的想法。但是,col[i++][responses[i-'a'] ++]行有一些问题。

  • 首先假设responses为小写,您可能希望responses[i]-'a'而不是responses[i-'a'],将字母等级转换为0,1,2,3,4索引。
  • 然后,它是要增加的表的内容,而不是行和列索引。那是col[i][responses[i]-'a']++

作为旁注,您不需要第二个while (!studfin.eof())循环来更新直方图。您可以在检查密钥的答案时继续更新它(除非您在第一个循环结束时重置已到达文件结尾的输入流,否则不应使用第二个循环。)