黑马程序员技术交流社区
标题:
while循环的问题
[打印本页]
作者:
GO_monster
时间:
2015-4-21 09:42
标题:
while循环的问题
#include<stdio.h>
int main()
{
int n=0;
while(n<=0)
{
printf("输入整数:\n");
scanf("%d",&n);
}
int i=0;
int sum=0;
while(i<=n)
{
i++;
sum=sum+i;
}
printf("%d",sum);
return 0;
}
该程序如果输入是整数就会运行成功,但是输入小数0.1或者0.几就会死循环。什么原因,如何排除?
作者:
13673696542
时间:
2015-4-21 10:53
应该不是死循环吧,看起来只是数很大。你输0.1是float类型,而你确用int来存,它们的二进制存储方式不一样。
作者:
程序小白猿
时间:
2015-4-21 11:39
肯定是死循环,比如 int a =10.8,此时你打印 a的值%d,肯定是10,所以你输入0.1,你的n是int类型,所以就是存储为0,要是n为0,就是死循环
作者:
itheima_llt
时间:
2015-4-21 21:04
好东西哦,大家不要光看不顶
作者:
人生充满期待
时间:
2015-4-21 21:23
你定义的时候就把输入的值定义为整数,当然不能输入小数了
作者:
人生充满期待
时间:
2015-4-21 21:33
感觉你这个有点钻牛角尖了,如果用户输入的是一些乱码之类的 难道你还要再设计个函数来排除么,前面都提示让用户输入整数了
作者:
itheima_llt
时间:
2015-4-21 23:10
好,应该顶,今后继续努力
作者:
逆流瞅瞅
时间:
2015-4-21 23:27
0.1是float类型,按%d输入的话,只会对n存入整数部分0。所以程序一直在while循环里
作者:
天使爱恋。。
时间:
2015-4-21 23:37
都提示你输入整数了,你还输入小数肯定 一直在 while循环里
作者:
SketchK
时间:
2015-4-22 00:32
楼主,你好!
我仔细查看了您写的代码,认为您对该问题产生疑惑的原因可能有以下几点:
1.没有理解变量的自动类型转换机制
变量n定义为整数,所以当您输入0.X(例如0.1,0.2)的时候,电脑自动会将其判断为0
2.While函数的运行原理
While函数的基本结构为:
while(条件)
{循环体}
其运行原理为,当条件成立时,即执行循环体,当条件不成立,跳出循环。
由于在上一个环节中,0.X被电脑自动转换为0后,符合n<=0的条件,会一直执行while循环的循环体,所以出现了您所说的情况
不知道我这样的解释,您是否满意!:lol
作者:
wodeheimalife
时间:
2015-4-22 08:01
应该输入整数
作者:
LiuWei2015
时间:
2015-4-22 08:18
这不是废话吗?你上面的while的条件是n<=0你定义的n是整形,如果你输入小数会取证,那就是0,就会无限循环让你输入啊。你把类型定义为float吧后面在如果需要输出整形你在付给整形取整,或直接×10或多少就行了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2