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

新C++开发者求助:do-while循环异常及程序修复方案

问题诊断与修复方案

嘿,我一眼就瞅到问题出在哪啦!你的do-while循环停不下来,核心原因是把赋值运算符和比较运算符搞混了。

问题根源

看你代码里的循环终止条件:

} while (addClass = 1);

这里用的是赋值运算符=,它会把1直接赋给addClass,然后这个表达式的结果永远是1(也就是布尔值true),不管你输入0还是其他数字,循环都会无限执行下去。

修复步骤

把循环条件里的=改成相等比较运算符==,这样程序才会真正判断addClass的值是否等于1:

} while (addClass == 1);

额外优化小建议

除了这个核心问题,还有几个细节能让你的程序更完善:

  • 写入文件时可以调整格式,让成绩单更易读,比如给各字段加分隔符:
    fout << setw(12) << classSubject << " " << classCode 
         << " | 教授: " << professorFirst << " " << professorLast 
         << " | 学分: " << classUnits << " | 成绩: " << grade << endl;
    
  • 程序结束前记得显式关闭文件流:fout.close();,虽然程序退出时会自动关闭,但显式关闭是个好习惯
  • 后续可以考虑添加输入合法性检查,比如用户输入非数字时的异常处理(这是进阶内容,慢慢来就行)

修改后的关键代码片段:

do {
    addClass = 0;
    cout << "Please enter the class subject: ";
    cin >> classSubject;
    // ... 其余输入代码保持不变 ...
    
    cout << "Would you like to add another class? Type 1 for yes or 0 for no. ";
    cin >> addClass;
    cout << endl;

    // 优化后的文件写入格式
    fout << setw(12) << classSubject << " " << classCode 
         << " | Professor: " << professorFirst << " " << professorLast 
         << " | Units: " << classUnits << " | Grade: " << grade << endl;
} while (addClass == 1); // 这里改成==

fout.close(); // 关闭文件
system("pause");
return 0;

这样修改后,输入0时循环就会正常终止啦!

内容的提问来源于stack exchange,提问作者New Programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:25:56