c-为什么最后一个条件没有执行



100的前两个条件<a<200和100<b<200执行得很完美,但两者都在100和200之间的条件不起作用——不知道为什么?我的代码:

#include<stdio.h>
int main()
{
int a,b;
printf("Enter the first integer:");
scanf("%d",&a);
printf("Enter the second integer:");
scanf("%d",&b);
if (100<=a&&a<=200)
{printf("The integer %d lies between 100 and 200",a);}
else if (100<=b&&b<=200)
{printf("The integer %d lies between 100 and 200",b);}
else if((100<=a&&a<=200)&&(100<=b&&b<=200))
{printf("Both of the integers lie between 100 and 200");}
else
{printf("The integers does not lie between 100 and 200");}
return 0;
}

输出:在此处输入图像描述

只有当else块的相关if条件计算为0时,才考虑该块。

在您的情况下,如果a和b都在100和200之间,则将采用第一个if (100<=a&&a<=200),然后跳过其else块。如果你在不省略括号的情况下编写if-else块,这可能会帮助你理解为什么会出现这种情况:

if (100<=a && a<=200){
printf("The integer %d lies between 100 and 200",a);
} else {
if (100<=b && b<=200) {
printf("The integer %d lies between 100 and 200",b);
} else {
if((100<=a && a<=200) && (100<=b && b<=200)) {
printf("Both of the integers lie between 100 and 200");
} else {
printf("The integers does not lie between 100 and 200");
}
}
}

我建议您重新阅读if else的基础知识。当使用if-else时,将按顺序检查条件,一旦其中一个条件匹配,则执行该块,而忽略其余条件。

在您的情况下,当100<a<200和100<b<200,它匹配第一个块,因此它不检查其他条件。

最简单的解决方案是从if((100<=a&&a<=200)&&(100<=b&&b<=200))开始,然后设置其他else if条件。

如果例如If语句中的条件

if (100<=a&&a<=200) 

评估为逻辑true,则不会执行其他if-else语句,包括此if语句

else if((100<=a&&a<=200)&&(100<=b&&b<=200))

您需要从此语句开始if-else语句

if((100<=a&&a<=200)&&(100<=b&&b<=200))
{printf("Both of the integers lie between 100 and 200");}
else if (100<=a&&a<=200)
{printf("The integer %d lies between 100 and 200",a);}
else if (100<=b&&b<=200)
{printf("The integer %d lies between 100 and 200",b);}
else
{printf("The integers does not lie between 100 and 200");}

因为你需要了解更多关于c中if和else语句的信息,如果a在[100…200]之间,你写的意思是什么?如果不检查b是否在[100..200]之间,如果不检查你刚才忽略的两个条件?

我建议你使用这样的布尔值,这样如果你看不到,它就足够明显了

#include<stdio.h>
int main()
{
int a,b;
printf("Enter the first integer:");
scanf("%d",&a);
printf("Enter the second integer:");
scanf("%d",&b);
int x,y;
x=100<=a&&a<=200; // returns 1 if it's between 100 and 200
y=100<=b&&b<=200; // returns 1 if it's between 100 and 200
if ((x==1) && (y==1))
printf("Both of the integers lie between 100 and 200");
else {
if(x==1)
printf("The integer %d lies between 100 and 200",a);
else if (y==1) 
printf("The integer %d lies between 100 and 200",b);
else 
printf("The integers does not lie between 100 and 200");}
}

注意:如果每个条件或循环中都有一条语句,则无需打开括号

最新更新