| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1229 人关注过本帖
标题:新手求助C++的一个疑惑
只看楼主 加入收藏
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
 问题点数:0 回复次数:21 
新手求助C++的一个疑惑
先看程序:
#include<iostream.h>

void main()
{
        int year,i;
        cout<<"year=";
        cin>>year;
        if(year<0)
                cout<<"input error!"<<endl;
        while(year>=0 && year<=130)
        {
                i=year/10;
                switch(i)
                {
                case 0:
                        cout<<"小孩"<<endl;
                        break;
                case 1:
                        cout<<"少年"<<endl;
                        break;
                case 2:
                        cout<<"青年"<<endl;
                        break;
                case 3:
                case 4:
                        cout<<"中年"<<endl;
                        break;
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                case 13:
                        cout<<"老年"<<endl;
                        break;
                default:
                        cout<<"input error!"<<endl;
                }
                cout<<"input year=";
                cin>>year;
        }
}


问当我输入year值为小数的时候,为什么会进入死循环? 而且循环输出内容都为:“input year =小孩”
搜索更多相关主题的帖子: void include 
2010-10-21 10:03
书中叶
Rank: 2
来 自:河北省唐山市
等 级:论坛游民
帖 子:38
专家分:25
注 册:2010-8-5
收藏
得分:0 
因为year是int整型的
小数属于浮点型

科学家是要把可能的事变为可能,小说家是要把不可能的事变为可能
2010-10-21 10:38
myth_feng
Rank: 2
等 级:论坛游民
威 望:1
帖 子:25
专家分:59
注 册:2010-8-11
收藏
得分:0 
    fflush(stdin);   //清空cin缓存区
    cout<<"input year=";
    cin>>year;
2010-10-21 10:41
xinyuan54
Rank: 2
等 级:论坛游民
帖 子:10
专家分:17
注 册:2010-10-13
收藏
得分:0 
楼上正解!!
程序代码:
#include "stdafx.h"
#include "iostream"
using namespace std;


void main()
{
        float year;
        int i;
        cout<<"year=";
        cin>>year;
        if(year<0)
                cout<<"input error!"<<endl;
        while(year>=0 && year<=130)
        {
                i=year/10;
                switch(i)
                {
                case 0:
                        cout<<"小孩"<<endl;
                        break;
                case 1:
                        cout<<"少年"<<endl;
                        break;
                case 2:
                        cout<<"青年"<<endl;
                        break;
                case 3:
                case 4:
                        cout<<"中年"<<endl;
                        break;
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                case 13:
                        cout<<"老年"<<endl;
                        break;
                default:
                        cout<<"input error!"<<endl;
                }            

                cout<<"input year=";
                cin>>year;
        }
}
不过也可以把year定义成float这样也能解决问题!!~~
2010-10-21 11:00
书中叶
Rank: 2
来 自:河北省唐山市
等 级:论坛游民
帖 子:38
专家分:25
注 册:2010-8-5
收藏
得分:0 
把while改成if试一下,再把main块里的东西用for(;;){}括起来就行了

[ 本帖最后由 书中叶 于 2010-10-21 11:04 编辑 ]

科学家是要把可能的事变为可能,小说家是要把不可能的事变为可能
2010-10-21 11:03
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 2楼 书中叶
是呀,将year 改为double型以后就正常,但是我很好奇的就是为什么year设置为整形时,输入的浮点值都会出现循环,而且循环输出的结果为什么都为“小孩”呢?
2010-10-21 11:34
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 3楼 myth_feng
谢谢啦,不过我使用fflush(stdin)函数在循环内部,可是结果还是一样的?
2010-10-21 11:36
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 5楼 书中叶
呵呵,不过我最想了解的是,输入浮点数,为什么会出现循环.
2010-10-21 11:38
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
以下是引用veikin在2010-10-21 11:34:48的发言:

是呀,将year 改为double型以后就正常,但是我很好奇的就是为什么year设置为整形时,输入的浮点值都会出现循环,而且循环输出的结果为什么都为“小孩”呢?
问题1:为什么每次循环输出的结果都是小孩[color=#000000],并不是这样的,不然你输入一个比较大的数字(浮点型),会得到不同的答案,这和你输入的数值的大小有关系,但是可以确定的一点就是循环的结果一直是一个。就是一直为小孩,中年,或者老年。
问题2:为什么会产生循环;[/color]你会发现当你将year改为浮点型时,就不会出现循环了。我认为的原因是这样的(并不一定正确),以为你一开始对整型变量输入了浮点型数据,所以你的cin输入流发生错误,就已经不再执行了,缓冲区里一直存放着你一开始存放的数据,所以一直是你第一个输入的数,因此就产生了一个死循环。
3楼的解决方法是对的,就是每次清空你的输入流缓冲区,这样就保证的一次输入数据流出错不会引起死循环。

补充的一点:通常情况下,当一个输出流cout执行时,输入流cin里面的缓冲就会清空的,可能因为你的cin输入流出现错误,所以缓冲区没有清空,同时也不再接受新的数据吧。。

2010-10-21 14:15
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 9楼 hoho568
很感谢你的回答,不过我还是有些疑问。
①我测试过输入值:0<year<131之间浮点数值时,它能够进入while循环中,但是输出的值都为:“小孩”,或许是相当于不同的PC机访问同一个内存地址,所获得的值不一样那样等待道理(我猜的)。
②三楼那个方法我也尝试过了,不过我运行的 结果还是一样,麻烦你帮我看一下,谢谢。。。程序如下:
#include<iostream.h>
#include "stdio.h"

void main()
{
    int year,i;
    cout<<"year=";
    cin>>year;
    if(year<0)
        cout<<"input error!"<<endl;
    while(year>=0 && year<=130)
    {
        i=year/10;
        switch(i)
        {
        case 0:
            cout<<"小孩"<<endl;
            break;
        case 1:
            cout<<"少年"<<endl;
            break;
        case 2:
            cout<<"青年"<<endl;
            break;
        case 3:
        case 4:
            cout<<"中年"<<endl;
            break;
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
        case 11:
        case 12:
        case 13:
            cout<<"老年"<<endl;
            break;
        default:
            cout<<"input error!"<<endl;
        }
        fflush(stdin);
        cout<<"input year=";
        cin>>year;
    }
}
2010-10-21 14:58
快速回复:新手求助C++的一个疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013725 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved