首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》16.2 采用更明确的条件

关灯直达底部

有些程序员喜欢用


if(x)  

语句,建议不要用这种简写的方式,应使用


if(x!=0)  

的方式。又如在下面语句


if(x=y)   func( );  

中,程序员的本意是检查x和y是否相等,还是赋值呢?某些编译器对形如这种的表达式会给出警告,要求编写者予以确认。这时可以采用显式地进行比较,例如改为


if((x=y)!=0)    func( );  

的结构,就会使得代码的意图一目了然。

【例16.3】有如下一个源程序。


#include <stdio.h>int main(){     int a,b;     printf("输入两个整数:");     scanf("%d%d",&a,&b);     if(a&b) printf("输入的两个数均不为0。/n");     else printf("输入两个数至少有一个为0。/n");     return 0;}  

下面是运行实例。


输入两个整数:3 5输入的两个数均不为0。输入两个整数:0 2输入两个数至少有一个为0。输入两个整数:5 0输入两个数至少有一个为0。输入两个整数:0 0输入两个数至少有一个为0。  

根据运行示范,能判断程序是否正确吗?

【分析】运行示范确实符合要求,但这并不能说明程序没有错误。如果能找到一个输出错误的例子,就能否定这个程序。假如输入“12 3”,则有


输入两个整数:12  3输入两个数至少有一个为0。  

由此可以证明程序运行不正确!这个程序使用“&”代替“&&”,对数据判断存在错误。&是位运算,而


12 & 3  

中,12的代码是1100,3的代码是0011,其运算结果恰好为0,执行else语句则给出错误结果。应该使用


if((a != 0) && (b != 0))  

来代替它。改正的程序如下。


#include <stdio.h>int main( ){     int a,b;     printf("输入两个整数:");     scanf("%d%d",&a,&b);     if((a!=0)&&(b!=0)) printf("输入的两个数均不为0。/n");     else printf("输入两个数至少有一个为0。/n");     return 0;}输入两个整数:12 3输入的两个数均不为0。  

修改后的程序对输入“12 3”的运行符合要求。