| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1229 人关注过本帖
标题:新手求助C++的一个疑惑
取消只看楼主 加入收藏
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
 问题点数:0 回复次数:9 
新手求助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
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
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
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 11楼 无名可用
但是我还是有一点疑问,就是假设我输入45.6的话,那它第一次从缓存中取出的是45,然后再进入死循环,那么它第一次显示的应该是“老年”,但是我输入区间在(0-131)直接输出值都是“小孩”的。
2010-10-21 17:01
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 12楼 hoho568
我用你说的,但是一样出现循环,我的环境是visual c++6.0
2010-10-21 17:04
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 15楼 brightboy
把cout<<"input year=";  cin>>year;去掉时,因为while语句中并没对year值进行修改,所以当然输入100就会进入死循环。不过我想应该就是你说的这样,只要输错,就直接跳到case 0...3Q啦。。。
2010-10-21 20:47
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 19楼 Tveiker
很感谢19楼,可能是太浮躁了最近,没能静下来好好的调试一下。。。
2010-10-22 09:28
veikin
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-12-24
收藏
得分:0 
回复 19楼 Tveiker
我用编译器调试了,不过调试结果是year值都为小数点前面那个数,并不是小数部分。
2010-10-22 11:50
快速回复:新手求助C++的一个疑惑
数据加载中...
 
   



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

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