好的,所以我知道你们不是我自己的个人程序员,但我想知道你是否可以在这里帮助我。我在上学的时候是一名教师助理。我知道一些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'] ++];
}
}
}
答案 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())
循环来更新直方图。您可以在检查密钥的答案时继续更新它(除非您在第一个循环结束时重置已到达文件结尾的输入流,否则不应使用第二个循环。)