中国大学MOOC上浙江大学翁恺老师的程序设计入门——C语言第一次单元测验中有这样一道题:
#include<stdio.h>
int main()
{
int i=6;
if(i<=6)
printf("hello\n");;
else
printf("bye-bye\n");;
return 0;
}
编译后结果如下:
即else未能找到配对的if
else与if何时才能对应?一般说法是:else 总是与其前面最近的尚未配对的if配对、else总是与尽可能近的if配对(就近原则)。
对于该就近原则,在本题中,由于if后面没有写大括号,故而之后的一句话是if之内的,即第一个分号之前的话是满足if条件则进行的。而printf语句后面的空语句无论如何都会执行,由此,else就会和if分开,找不到最近的if,于是不能编译。
之后又问了问我班大佬,大佬的意见是: