c语言的一个小问题
#include<stdio.h>void main()
{
int a,b,c,max,min;
printf("输入三个数字:\n");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
max=a;
min=b;
}
else
{
max=b;
min=a;
}
if(max<c)
max=c;
else
if(min>c);
min=c;
printf("最大的数为:%d,最小的数为:%d\n",max,min);
}
这个程序运行出来输入3 4 5三个数,怎么会出来最大数为5,最小数为5啊,我按照培训视频输入的啊,怎么视频里面没错,我这个就有错啊,哪里出错误了啊!
本帖最后由 565123 于 2013-7-21 14:56 编辑
if(min>c)//这里不用分号,如果有分号的话,那个if语句就没用了 if(min>c);
如ls所说,当lz在if语句后面加;时,这个if语句就是一个空语句,后面的语句就都会执行,也就是说 min=c;一定会执行,所以lz的代码min一定为c的值。 怎么会有这种算法?
a>b?a:b;
用这种多好! if(max<c)
max=c;
else
if(min>c);
min=c;
最后这个如果语句句有了分号,就算一句了。下面的min=c;不论如何都会执行! #include<stdio.h>
void main()
{
int a,b,c,max,min;
printf("输入三个数字:\n");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
max=a;
min=b;
if(max<c)
max=c;
if(min>c)
min=c;
}
else
{
max=b;
min=a;
if(max<c)
max=c;
if(min>c)
min=c;
}
printf("最大的数为:%d,最小的数为:%d\n",max,min);
}
本人已测,绝对成功。
稍后作详细解释
建议楼主用vc尝试以下程序,发现打印不出max,min,说明printf语句之前已经有问题。
#include<stdio.h>
void main()
{
int a,b,max,min;
printf("输入两个数字:\n");
scanf("%d %d ",&a,&b);
if(a>b)
{
max=a;
min=b;
/*if(max<c)
max=c;
if(min>c)
min=c;*/
}
else
{
max=b;
min=a;
/*if(max<c)
max=c;
if(min>c)
min=c;*/
}
printf("最大的数为:%d,最小的数为:%d\n",max,min);
} 说实在的,你本身代码就有问题,在判断完max < c 后就else if 判断min > c。请问这两者之间有关系吗?建议还是一步一步来比较好,运行无误才是初学的标准 新人,路过学习一下{:1_1:} if(min>c);
min=c;
相当于
if(min>c)
;
min=c;
这样if只能控制中间那个空语句,min=c;这条语句就一定会执行,所以最小值始终等于c。 {:1_1:} 运行了一下没问题,楼主的这句if(min>c);的分号的问题
页:
[1]