有些程序员喜欢用
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”的运行符合要求。