C语言if-else语句异常:输入任意值均执行第一个分支,求问题排查
问题分析与解决办法
你代码里的核心错误是把比较相等的运算符==写成了赋值运算符=,这是C语言新手非常常见的问题。
在if (choice='y')这个语句中,choice='y'是赋值操作——它会把字符'y'强制赋值给变量choice,同时这个表达式的结果就是'y'(非零值)。而C语言里非零值会被判定为true,所以不管你输入什么内容,第一个if条件都会成立,程序也就只会执行第一个分支的输出。第二个else if里的choice='n'也是同样的错误,但因为第一个条件已经触发,它永远不会被执行。
修正后的代码如下:
#include <stdio.h> int main () { char choice; printf("are you handsome? (y or n): "); scanf("%c", &choice); if (choice == 'y') { printf("you are clearly lying"); } else if (choice == 'n') { printf("i'm glad you're being honest :D"); } else { printf("you're not following instructions"); } return 0; }
额外提示:如果想避免这类失误,可以把常量写在比较运算符的前面,比如写成if ('y' == choice)。这样如果不小心写成=,编译器会直接报错(因为不能给常量赋值),能帮你提前发现问题。
内容的提问来源于stack exchange,提问作者Mark David Semorio
相关产品推荐
相关产品推荐

