You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:54:03