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

C++入门作业txt文件读写功能switch语句错误修正求助

C++作业switch语句错误修正

核心错误原因

你的switch语句存在case穿透问题:case 0和case 1分支执行完对应逻辑后没有加break,会导致匹配到对应分支后,继续执行后续分支的代码:

  • 当NumIn为0时,执行完s +=1后会继续执行b +=s,不符合作业要求的「0时仅s自增1」的规则
  • 当NumIn为1时,执行完b +=s后没有break,虽然当前是最后一个分支不会立刻引发逻辑错误,但属于不规范写法

修正后的switch代码

switch (NumIn) {
case -1:
    a += s;
    break;
case 0:
    s += 1;
    break; // 新增break,阻止穿透到case1
case 1:
    b += s;
    break; // 新增break,符合代码规范
}

额外优化建议(可选)

你当前的while (!inFile.eof())写法存在风险:当读取到文件末尾时,eof标记不会立刻触发,会多执行一次循环,可能导致最后一行数据重复处理。可以把循环调整为如下写法:

// 把原循环里的inFile >> NumIn;移动到循环条件中,读取失败直接终止循环
while (inFile >> NumIn) {
    cout << NumIn << endl;
    // 剩余原有逻辑保持不变
}

完整修正后代码

#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    int s = -2, a = 0, b = 0, NumIn;

    ifstream inFile("NumbersIn.txt");
    if (inFile.fail()) {
        cout << "Unable to open file" << endl;
        return -1;
    }

    ofstream outFile("RevisedNumbers.txt");
    while (inFile >> NumIn) {
        cout << NumIn << endl;
        if (NumIn < 0)
            NumIn = -1;
        else if (NumIn > 0)
            NumIn = 1;
        outFile << NumIn << endl;
        switch (NumIn) {
        case -1:
            a += s;
            break;
        case 0:
            s += 1;
            break;
        case 1:
            b += s;
            break;
        }
    }
    outFile.close();
    inFile.close();
    cout << "A = " << a << endl;
    cout << "B = " << b << endl;
    cout << "S = " << s << endl;

    return 0;
}

内容的提问来源于stack exchange,提问作者Miching Mallecho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:45:07