在c语言if语句中又一种形式是:
if(表达式1) 语句1
else if(表达式2) 语句2
else 语句3
请问可不可以写成
if(表达式1) 语句1
if(表达式2) 语句2
else 语句3
这样写可以吗,说下原因
不可以。
第一种是:
语句1的执行逻辑是:表达式1为真;
语句2的执行逻辑是:表达式1为假并且表达式2为真;
语句3的执行逻辑是:表达式1为假并且表达式2为假;
但是第二种写法则是;
语句1的执行逻辑是:表达式1为真;
语句2的执行逻辑是:表达式2为真;与表达式1的值没有关系;
语句3的执行逻辑是:表达式2为假,与表达式1的值没有关系;
else与前面的if是最近匹配关系;这一点要注意。
第一种是:
语句1的执行逻辑是:表达式1为真;
语句2的执行逻辑是:表达式1为假并且表达式2为真;
语句3的执行逻辑是:表达式1为假并且表达式2为假;
但是第二种写法则是;
语句1的执行逻辑是:表达式1为真;
语句2的执行逻辑是:表达式2为真;与表达式1的值没有关系;
语句3的执行逻辑是:表达式2为假,与表达式1的值没有关系;
else与前面的if是最近匹配关系;这一点要注意。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2008-08-16
不可以!举个例子
如果i = 1 的话,这段程序后j的值是0;(只执行第一句)
if(i>0) {i = 0; j = 0;}
else if (i==0) j = 1;
else j = -1;
但如果修改成一下形式,则i=1时,j的值变为1 (执行第一句之后,执行第二句)
if(i>0) {i = 0; j = 0;}
if(i==0) j = 1;
else j = -1;
现在你明白了吧。
如果i = 1 的话,这段程序后j的值是0;(只执行第一句)
if(i>0) {i = 0; j = 0;}
else if (i==0) j = 1;
else j = -1;
但如果修改成一下形式,则i=1时,j的值变为1 (执行第一句之后,执行第二句)
if(i>0) {i = 0; j = 0;}
if(i==0) j = 1;
else j = -1;
现在你明白了吧。
第2个回答 2008-08-16
可以,因为c++的规则是else自动跟上面最近的一个if匹配
不信的话,写个简单的小程序试一下就行了,不会错的
不信的话,写个简单的小程序试一下就行了,不会错的
第3个回答 2008-08-16
可以,没有逻辑上的错误。实际上第二个if时就默认否决了第一个if的条件,所以不存在冲突。
第4个回答 2008-08-16
最好编程试下,因为这第三个else可能是对应的第一个IF
第5个回答 2019-07-28
你好,正确的语句如下:
while(scanf("%d",&a)!=eof&&(a<100||a>999))
printf("您输入的不是三位数,请重新输入:");
有疑问提出。
望采纳。
while(scanf("%d",&a)!=eof&&(a<100||a>999))
printf("您输入的不是三位数,请重新输入:");
有疑问提出。
望采纳。