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

