c++ - 用于对多个 True 或 False 测试进行评分的 C++ 程序
问题描述
问题:
我的主要问题是我很难将包含数组的函数连接到主函数。
您学校的历史老师在对真/假测试评分时需要帮助。学生的 ID 和测试答案存储在一个文件中。文件中的第一个条目包含测试的答案,格式如下:
TFFTFFTTTTFFTFTFTFTT
文件中的每个其他条目都是学生 ID,后跟一个空白,然后是学生的回答。例如,条目:
ABC54301 TFTTFTTFTTFTTFTTFTTFT
表示学生 ID 为ABC54301,问题的答案1
为True,问题的答案2
为False,以此类推。这个学生没有回答问题9
。考试有20
题,班里有150
学生多。每答对一题得两分,答错一题扣一分,不答题得零分。编写一个处理测试数据的程序。输出应该是学生的 ID,然后是答案,然后是考试成绩,然后是考试成绩。假设以下年级规模:
90%–100%,一个;80%–89.99%,乙;70%–79.99%,C;60%–69.99%,D;和 0%–59.99%,F。
代码
// Chap9BBProg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iomanip>
#include <cmath>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int stux;
char stuGrade;
int correctAnswers(char[], char[]);
char studentGrade(int score);
char ansKey[10];
char stuA[10];
int main()
{
ifstream inFile;
ofstream outFile;
inFile.open("TFInput.txt");
outFile.open("TFOutput.txt");
double score;
char grade;
string key;
string studentID;
string stuAnswers;
getline(inFile, key);
outFile << "The correct answers are " << key << endl << endl;
while (getline(inFile, studentID, ' '))
{
outFile << studentID << " ";
getline(inFile, stuAnswers);
stux = studentGrade(stux);
outFile << " " << stuAnswers << endl;
}
return 0;
}
int correctAnswers(char answerKey[], char studentAnswers[])
{
int i;
int tempscore;
for (i = 0; i < 22; i++)
{
if (answerKey[i] == studentAnswers[i])
{
tempscore += 2;
}
else if (studentAnswers[i] == ' ')
{
tempscore += 0;
}
else
{
tempscore -= 1;
}
}
cout << tempscore << endl;
return tempscore;
}
char studentGrade(int x)
{
int i;
double score = 0;
char grade = ' ';
score = x / 40.0 * 100;
for (i = 0; i < 30; i++)
{
if (score >= 90)
grade = 'A';
else if (score < 90 && score > 79)
grade = 'B';
else if (score <= 79 && score > 69)
grade = 'C';
else if (score <= 69 && score > 60)
grade = 'D';
else if (score <= 59)
grade = 'F';
}
return grade;
}
解决方案
注意到一些小问题,例如在函数 correctAnswers() 中,变量 tempscore 未初始化,并且注意到 char[] 和字符串之间的函数参数冲突。
int stux;
char stuGrade;
int correctAnswers(string, string);
char studentGrade(int score);
char ansKey[10];
char stuA[10];
int main()
{
ifstream inFile;
ofstream outFile;
inFile.open("TFInput.txt");
outFile.open("TFOutput.txt");
double score;
string key;
string studentID;
string stuAnswers;
getline(inFile, key);
outFile << "The correct answers are " << key << endl << endl;
while (getline(inFile, studentID, ' '))
{
outFile << studentID << " ";
getline(inFile, stuAnswers);
score = correctAnswers(key, stuAnswers); //Changed here
stuGrade = studentGrade(score); //Changed here
outFile << " Score: " << score <<" Grade: " << stuGrade << endl; //Changed here
}
return 0;
}
int correctAnswers(string answerKey, string studentAnswers) //Changed here Array to string
{
int i;
int tempscore = 0; //Changed here Initialized to 0
for (i = 0; i < 21; i++) //Changed 22 to 21 here
{
if (answerKey[i] == studentAnswers[i])
{
tempscore += 2;
}
else if (studentAnswers[i] == ' ')
{
tempscore += 0;
}
else
{
tempscore -= 1;
}
}
cout << tempscore << endl;
return tempscore;
}
char studentGrade(int x)
{
int i;
double score = 0;
char grade = ' ';
score = x / 40.0 * 100;
if (score >= 90)
grade = 'A';
else if (score < 90 && score > 79)
grade = 'B';
else if (score <= 79 && score > 69)
grade = 'C';
else if (score <= 69 && score > 60)
grade = 'D';
else if (score <= 59)
grade = 'F';
return grade;
}
推荐阅读
- python - 有没有办法使用操纵杆登录树莓派
- regex - 需要正则表达式命令来提取具有 2 点 (.) 的完整文件名
- python - 在 python 中使用 zip 时,'int' 对象不可迭代
- java - 服务、setVolume 和 Seekbar
- python - Discord.py - 当 B 发送回复 A 的原始消息的消息时,如何从 B 的消息中获取 A 的 ID?
- javascript - 为什么此代码使用 `removeEventListener` 似乎无法正确解除绑定关键事件?
- python-3.x - 有没有更好的方法来比较多个功能?
- java - 如果在 sonarqube 中声明后对 code2.java 中使用的字符串进行规范化,请从 Code1.java 检查
- java - 将一种对象类型分配给另一种对象类型时,Java 变量如何工作?
- r - 在 R 中跨不同数据帧替换值