悬挂else问题
if(x==0)
if(y==0)error();
else {
z=x+y;
f(&z);
}
c 语言中else 始终与 同一对括号内最近的未匹配的if结合。
所以上面这段代码的实际执行是
if(x==0){
if(y==0)error();
else{
z=x+y;
f(&z);
}}
而不是
if(x==0)
{
if(y==0)error();
}
else {
z=x+y;
f(&z);
}
}
例子:
#include <iostream>
#include <string.h>
using namespace std;
int main(){
if(3<5)
if(3<2)cout<<8<<endl;
else cout<<9<<endl;
return 0;
}
上面程序的输出结果是9 而不是什么也不输出。