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
相关产品推荐
相关产品推荐

