为什么我的C++代码未将用户输入的0识别为有效响应?
问题根本原因
你在分支判断中混淆了赋值运算符=和相等比较运算符==,这是导致逻辑分支执行异常的核心诱因。
具体执行逻辑拆解
- 代码中
else if (a = 0)的写法并非判断a是否等于0,而是执行赋值操作:把0写入变量a的内存空间,整个表达式的返回值为0(对应逻辑假),这个分支永远不会被触发。 - 紧随其后的
else if (a = 1)同样属于赋值操作:在上个分支完成a = 0的赋值后,这里又把1写入a的内存,整个表达式的返回值为1(对应逻辑真),所以只要用户输入的值通过了最开头的非法校验,程序一定会走到这个分支,完全忽略用户最初输入0的场景,这也是只有输入1对应的分支会正常执行的原因。
修正方案
将两个分支判断里的赋值操作替换为相等比较,修改后的代码如下:
//Do you want the minutes converted into hours? if ((a != 0) && (a != 1)) { cout << "That is not a valid answer. Please try again."; } else if (a == 0) { cout << "Thank you for using the program"; } else if (a == 1) { average_hours_per_day = average_minutes_per_day/hour; cout << average_hours_per_day; }
避坑优化建议
后续编写相等判断时,可以将常量放在比较表达式的左侧,比如写成0 == a、1 == a的形式。如果不小心漏写一个等号写成0 = a,编译器会直接抛出编译错误(常量不允许被赋值),从根源上避免这类笔误。
内容的提问来源于stack exchange,提问作者Shuhab Ahmed
相关产品推荐
相关产品推荐

