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

scanf输入与返回值异常求助:条件判断始终走else分支

问题排查与修复

你的代码问题出在两个独立的if语句上:第二个if和它后面的else是绑定的,而第一个if和它们没有关联。

当你输入y/Y时,第一个if会执行(给cost加15),但程序会继续往下走,进入第二个if的判断——此时oakAns不是n/N,所以条件不成立,直接触发else分支,打印错误信息并返回false,这就是为什么输入正确选项却执行else的原因。

修复方案

把第二个if改成else if,让三个分支(y/Y、n/N、其他)形成互斥的判断逻辑:

char oakAns;

printf("Would you like the sign made out of oak?\n");
printf("Enter y for yes or n for no: ");

scanf(" %c",&oakAns);

printf("%c",oakAns);  // 用于确认输入的oakAns值

if((oakAns == 'y')||(oakAns == 'Y')){          // 如果选y,加15
  cost += 15;
} 
else if((oakAns == 'n')||(oakAns == 'N')){    // 如果选n,保持cost为30
  cost = 30;
}
else {                      // 其他输入则报错
  printf("Could not compute cost...\n");
  return false;
}

这样修改后,当输入y/Y时,只会执行第一个分支,不会走到后面的else if和else;输入n/N时执行第二个分支;其他输入才会触发错误提示,逻辑就正常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:57:32