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

