C++月份天数程序添加非法输入判断后异常终止问题求助
问题分析与修复方案
嘿,我一眼就揪出你代码里的问题啦——第一个if语句的逻辑运算符用错了,这就是为啥程序不管输入啥都会直接终止的核心原因!
核心问题:逻辑运算符误用
你写的判断条件是:
if (month != 1 || month != 2 || ... || month != 12 )
这里用了逻辑或(||),但逻辑或的规则是:只要有一个条件为真,整个表达式就为真。你琢磨下:不管输入的month是多少,它肯定不可能同时等于1到12所有数字,比如输入1,month !=2就是真的,所以这个条件永远成立,程序直接触发提示并退出了。
正确的逻辑应该是:当month不在1-12范围内时才提示,要么用**逻辑与(&&)**逐个判断“不等于所有合法月份”,要么更简洁地直接判断范围,后者代码可读性更高。
修复后的代码
#include <iostream> using namespace std; int main() { int month = 0; int days; cout << "Month: "; cin >> month; // 改成范围判断,逻辑更清晰简洁 if (month < 1 || month > 12) { cout << "not a number for a month"; return 0; } if (month == 4 || month == 6 || month == 9 || month == 11) days = 30; // 额外建议:补上二月的判断,让程序更完整 else if (month == 2) days = 28; // 后续可以扩展闰年判断逻辑 else days = 31; cout << days << endl; return 0; }
额外小提示
- 用
month <1 || month>12代替逐个判断,不仅代码更短,还能避免漏写月份的失误; - 我额外加了二月的判断,毕竟它的天数和其他月份不一样,你要是想完善功能,可以再加个闰年判断的逻辑;
- 输出天数时加个
endl,能让结果换行显示,看起来更舒服。
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

