If和If语句/使用{}

时间:2019-11-25 01:18:08

标签: if-statement

我有一个简单的问题。为什么第一个程序不起作用并返回0,而第二个如果起作用则返回另一个?它不会掉下来并检查下一个是否?

#include <stdio.h>
int main ()    
{
    int m,n,tmp,i;
    int nnumber=0,numbermin=9999999;
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        tmp=i;
        while (tmp > 0 && (tmp % 10) % 2 == 0)
        {
            tmp/=10;  
        } 
        if (tmp == 0){ // This don't work i as want from this if to go down 
                       // there and check the next if
                       // i only got 0 at the printf("%d" , numbermin);
            nnumber=i;  
        }
        if(nnumber<numbermin)
        {
            numbermin=nnumber;
        }

    }
    if(nnumber==0)
        printf("NO");
    else
        printf("%d",numbermin);
}

运行良好的代码。

#include <stdio.h>
int main ()    
{
    int m,n,tmp,i;
    int nnumber=0,numbermin=9999999;
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        tmp=i;
        while (tmp > 0 && (tmp % 10) % 2 == 0)
        {
            tmp/=10;  
        } 
        if (tmp == 0) {
            nnumber=i;
            if(nnumber<numbermin)
            {
                numbermin=nnumber; // But this work perfect i want to know why the first ex didn't work ?
            }
        }

    }
    if(nnumber==0)
        printf("NO");
    else
        printf("%d",numbermin);
} 

为什么只有第二个效果很好,而第一个效果不好?

1 个答案:

答案 0 :(得分:0)

这是由于在第一个示例中,如果tmp不等于0,那么第二个if语句仍然可以被评估为true,而第一个则不为true。 / p>

if (tmp == 0){
    nnumber=i;  
}
if(nnumber<numbermin)
{
    numbermin=nnumber;
}

在第二个示例中,如果tmp等于0,则第一个if语句被评估为false,并禁止其中的任何内容影响程序。

if (tmp == 0){
    nnumber=i;
    if(nnumber<numbermin){
       numbermin=nnumber;
    }
}

这将解释在运行这两个版本的代码时结果的差异。