C++数组实现驾照考试评分程序读取文件无输出问题求助
C++驾照考试评分程序故障排查
核心问题列表
- 逻辑分支写反:将文件读取的逻辑放在了文件打开失败的判断分支内,导致文件正常打开时不会执行任何读取、评分逻辑,无任何输出
- if判断后多余分号:
if(answer[i] == user_input[i]);末尾的分号直接终止了条件判断,无论答案是否匹配,计数器都会累加,统计逻辑完全失效 - 答案读取逻辑错误:
file >> user_input直接读取字符数组无法适配空格分隔的答案格式,不能按顺序正确存入20道题的答案 - 缺少要求的输出项:未实现答对/答错数量统计、答错题目编号输出的作业要求功能
修正后完整代码
#include <iostream> #include <fstream> #include <vector> using namespace std; void check(char answer[], char user_input[], int questions, int correct); int main() { // 题目总数 const int questions = 20; // 通过考试需要答对15题 const int pass_line = 15; // 正确答案序列 char answer[questions] = { 'B','D','A','A','C', 'A','B','A','C','D', 'B','C','D','A','D', 'C','C','B','D','A' }; ifstream file; string file_name; cout << "Enter the file name: "; cin >> file_name; file.open(file_name); // 文件打开失败处理 if (!file) { cout << "The file is not open!!" << endl; return 1; } // 文件打开成功后读取考生答案 while (true) { char user_input[questions]; // 逐题读取考生答案,自动跳过空格和换行符 for (int i = 0; i < questions; i++) { if (!(file >> user_input[i])) { file.close(); return 0; } } check(answer, user_input, questions, pass_line); } return 0; } void check(char answer[], char user_input[], int questions, int pass_line) { int correct_count = 0; vector<int> wrong_questions; for(int i = 0; i < questions; i++) { if(answer[i] == user_input[i]) { correct_count++; } else { // 题目编号从1开始计数 wrong_questions.push_back(i + 1); } } // 格式化输出结果 cout << endl; cout << "Pass/Fail " << "#correct " << "#incorrect " << "wrong answers" << endl; cout << "----------------------------------------------------------------" << endl; cout << (correct_count >= pass_line ? "pass" : "fail") << " "; cout << correct_count << " " << questions - correct_count << " "; for (int num : wrong_questions) { cout << num << " "; } cout << endl; }
内容的提问来源于stack exchange,提问作者Perseus D
相关产品推荐
相关产品推荐

