A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© GO_monster 中级黑马   /  2015-4-21 09:42  /  1211 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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.几就会死循环。什么原因,如何排除?

11 个回复

倒序浏览
应该不是死循环吧,看起来只是数很大。你输0.1是float类型,而你确用int来存,它们的二进制存储方式不一样。
回复 使用道具 举报
肯定是死循环,比如 int a  =10.8,此时你打印 a的值%d,肯定是10,所以你输入0.1,你的n是int类型,所以就是存储为0,要是n为0,就是死循环
回复 使用道具 举报
好东西哦,大家不要光看不顶
回复 使用道具 举报
你定义的时候就把输入的值定义为整数,当然不能输入小数了
回复 使用道具 举报
感觉你这个有点钻牛角尖了,如果用户输入的是一些乱码之类的 难道你还要再设计个函数来排除么,前面都提示让用户输入整数了
回复 使用道具 举报
好,应该顶,今后继续努力
回复 使用道具 举报
0.1是float类型,按%d输入的话,只会对n存入整数部分0。所以程序一直在while循环里
回复 使用道具 举报
都提示你输入整数了,你还输入小数肯定 一直在 while循环里
回复 使用道具 举报
楼主,你好!
我仔细查看了您写的代码,认为您对该问题产生疑惑的原因可能有以下几点:
1.没有理解变量的自动类型转换机制
变量n定义为整数,所以当您输入0.X(例如0.1,0.2)的时候,电脑自动会将其判断为0
2.While函数的运行原理
While函数的基本结构为:
while(条件)
{循环体}
其运行原理为,当条件成立时,即执行循环体,当条件不成立,跳出循环。
由于在上一个环节中,0.X被电脑自动转换为0后,符合n<=0的条件,会一直执行while循环的循环体,所以出现了您所说的情况
不知道我这样的解释,您是否满意!:lol

评分

参与人数 1技术分 +1 收起 理由
Micro + 1 赞一个!

查看全部评分

回复 使用道具 举报
应该输入整数
回复 使用道具 举报
这不是废话吗?你上面的while的条件是n<=0你定义的n是整形,如果你输入小数会取证,那就是0,就会无限循环让你输入啊。你把类型定义为float吧后面在如果需要输出整形你在付给整形取整,或直接×10或多少就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马