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

为什么我的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 11:15:03