我有一个简单的问题。为什么第一个程序不起作用并返回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);
}
为什么只有第二个效果很好,而第一个效果不好?
答案 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;
}
}
这将解释在运行这两个版本的代码时结果的差异。