当前位置: 代码迷 >> C语言 >> [求助] 循环语句中总是执行不需要的语句,怎么解决?
  详细解决方案

[求助] 循环语句中总是执行不需要的语句,怎么解决?

热度:93   发布时间:2007-10-12 22:25:21.0
[求助] 循环语句中总是执行不需要的语句,怎么解决?
题目:
从键盘输入一批整数,最后一个数为0,编程找出其中的最大数和最小数,并输出。
(要求:必须用的循环语句,while,do-while,for任选其一)


我自己写的代码:

#include<stdio.h>
main()
{
int max=0,min=0,i;
do
{
printf("Please Enter Number:");
scanf(" %d" ,&i);
if(max<i) max=i;
if(min>i&&i!=0) min=i;
}
while(i);
printf("MAX = %d , MIN = %d" ,max,min);
}

代码完成后,用TC2.0编译,输入正常,比较正常。
如:输入123,456,789,-123,-456,-789后,得到结果MAX = 789,MIN = -789,这是正确的。
但是,如果输入的数只是正数,最后输出的 MIN 就总是等于 0 ,意思就是 0 参与了数据比较。
本来按照题目的意思,0 应该只是作为结束符来使用,不参与比较的。
代码中我已经在这句中:
if(min>i&&i!=0) min=i;
加入了i!=0,但是很奇怪的,最后怎么运行结果MIN都是0

我以为是循环语句选用不正确,但是while,do-while,for都试过一遍,结果依然错误。

请高手帮我改正!!先谢过!
搜索更多相关的解决方案: 语句  

----------------解决方案--------------------------------------------------------
是这样的``

这里: int max=0,min=0,i;

这里: if(min>i&&i!=0) min=i;

再想想```



----------------解决方案--------------------------------------------------------
多谢LS,忘记赋值的问题了。

不过如果不赋值,编译有问题,Turbo C 中可以编译,但是DOS版的TC不能编译,能建议下赋值弄个什么值合适
----------------解决方案--------------------------------------------------------

#include<stdio.h>
int main(void)
{
int max,min,i;
printf("Please Enter Number:");
scanf(" %d" ,&i);
if (i==0)
{
printf("input error\n");
getch();
return 0;
}
max=min=i;
while (i!=0)
{
if (max<i) max=i;
if (min>i) min=i;
printf("Please Enter Number:");
scanf(" %d" ,&i);

}
printf("MAX = %d , MIN = %d" ,max,min);
getch();
return 0;
}

max=min=0;已经对min赋了初值,而在do循环中,由于输入的都是正整数>0,不会执行min=i;即min始终都为0。

[此贴子已经被作者于2007-10-12 23:35:44编辑过]


----------------解决方案--------------------------------------------------------

看来楼主还是没把循环语句完全搞清楚啊!


----------------解决方案--------------------------------------------------------
再次感谢2楼

我又想了一下,其实MAX,MIN两个变量赋值都是错误的,应该把第一次输入的值赋给它们才对

#include<stdio.h>
main()
{
int max,min,i;
printf("Please Enter Number:");
scanf(" %d" ,&i);
max=i;min=i;
do
{
printf("Please Enter Number:");
scanf(" %d" ,&i);
if(max<i) max=i;
if(min>i&&i!=0) min=i;
}
while(i);
printf("MAX = %d , MIN = %d" ,max,min);
}


4楼的我看过,感觉没必要这么麻烦,如果第一次就输入结束符0,就让MAX和MIN都等于0算了,没必要报错的(虽然报错更严谨)。

同时也感谢4楼的,虽然我更喜欢2楼的启发式指导。。。。。

再次感谢 死了都要C

----------------解决方案--------------------------------------------------------
94,一般要求输出MAX和MIN的话,  都是把第一个数值同时赋值给MAX和MIN,后面在去比较,在赋值。
----------------解决方案--------------------------------------------------------
6楼的程序的第 10、11 行移到后面两个 if 语句的后面比较好点,要不然做为结束符的 0 还是参与了比较。


----------------解决方案--------------------------------------------------------
  相关解决方案