gjsgjslovegtt 发表于 2013-7-21 14:29:01

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:54:23

本帖最后由 565123 于 2013-7-21 14:56 编辑

if(min>c)//这里不用分号,如果有分号的话,那个if语句就没用了

小亮1201 发表于 2013-7-21 15:26:13

if(min>c);
如ls所说,当lz在if语句后面加;时,这个if语句就是一个空语句,后面的语句就都会执行,也就是说 min=c;一定会执行,所以lz的代码min一定为c的值。

刀下留人 发表于 2013-7-21 15:40:34

怎么会有这种算法?
a>b?a:b;
用这种多好!

刀下留人 发表于 2013-7-21 15:44:32

if(max<c)
      max=c;

else
if(min>c);

      min=c;

最后这个如果语句句有了分号,就算一句了。下面的min=c;不论如何都会执行!

baozhazhizi 发表于 2013-7-22 11:19:06

#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);
}

Tcooop 发表于 2013-7-26 11:07:26

说实在的,你本身代码就有问题,在判断完max < c 后就else if 判断min > c。请问这两者之间有关系吗?建议还是一步一步来比较好,运行无误才是初学的标准

玉宁417 发表于 2013-9-27 07:46:48

新人,路过学习一下{:1_1:}

平平常常丶 发表于 2013-9-27 13:39:48

if(min>c);

      min=c;
相当于
if(min>c)
      ;
      min=c;
这样if只能控制中间那个空语句,min=c;这条语句就一定会执行,所以最小值始终等于c。

阔怀 发表于 2015-8-23 10:15:14

{:1_1:}

桃花飞舞 发表于 2015-8-23 11:05:46

运行了一下没问题,楼主的这句if(min>c);的分号的问题
页: [1]
查看完整版本: c语言的一个小问题