| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:while 的一个问题.帮帮忙!
只看楼主 加入收藏
sfier
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
while 的一个问题.帮帮忙!
看一下程序:


#include<iostream>
using namespace std;
int main()
{int a;
 cout<<"请输入1或2,其他无效"<<endl;
 cin>>a;
 while (a!=1&&a!=2)
    {
        cout<<"输入错误,请重新输入(需要按<1>  不需按<2>  其他无效)"<<endl;
        cin>>a;
    }
 return 0;
}


运行后,如果你输入了英文字母就悲剧了,大家试试,看看应该怎么改才不会出现现在运行后那种情况...谢谢!!!

2010-09-23 19:34
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:10 
#include<iostream>
using namespace std;
int main()
{int a;
cout<<"请输入1或2,其他无效"<<endl;
while (cin>>a && a!=1 && a!=2)//cin>>a会返回流从缓冲区正确接收数据的个数
    {
        cout<<"输入错误,请重新输入(需要按<1>  不需按<2>  其他无效)"<<endl;
        cin>>a;
    }
return 0;
}

2010-09-23 19:52
sfier
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-20
收藏
得分:0 
2楼的程序,我运行过,但是还是不能很好解决... 还是谢谢你的回答
2010-09-23 20:02
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:0 
对不起,刚才没仔细看程序..
#include<iostream>
using namespace std;
int main()
{int a;
cout<<"请输入1或2,其他无效"<<endl;
cin>>a;
while (a!=1 && a!=2)//cin>>a会返回流从缓冲区正确接收数据的个数
    {
        if(cin.fail())//如果你输入的类型与a的类型不一致,cin流的状态就会变成failbit
        {
            cin.clear();//这句用来清除cin流的错误状态
            //下面两句用来把缓冲区中的错误字符取走
            char c;
            cin>>c;//这句不需要人为输入数据,sin流会自动将刚才你输错的字符取走
        }
        cout<<"输入错误,请重新输入(需要按<1>  不需按<2>  其他无效)"<<endl;
        cin>>a;
    }
return 0;
}
输入的字符先存在缓冲区,输入完成后再由cin流从缓冲区把你输入正确的数据取走
2010-09-23 21:47
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:10 
#include<iostream>
using namespace std;
int main()
{
char a;
cout<<"请输入1或2,其他无效"<<endl;
cin>>a;
while (a!='1'&&a!='2')
 {
        cout<<"输入错误,请重新输入(需要按<1>  不需按<2>  其他无效)"<<endl;
        cin>>a;
}
return 0;
}

把a 定义为字符型就可以解决啦!你原先的a 定义为整形,输入字符则会强制转化为整形,导致出错!!

If You Want Something, Go Get It, Period.
2010-09-23 21:49
ljt
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:191
专家分:431
注 册:2009-4-6
收藏
得分:0 
不就是类型的问题么
2010-09-23 22:08
sfier
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-20
收藏
得分:0 
实在是太感谢四楼和五楼了!!!你们的方法都可以,本来我也是想到了a 的类型问题,但是就是不知道,原来把 1 和 2 改成字符型就可以...谢谢!
2010-09-23 23:04
manliuhui
Rank: 2
来 自:山东德州
等 级:论坛游民
帖 子:23
专家分:52
注 册:2009-7-25
收藏
得分:0 
请问楼主用的什么编译器。我用的DEV-C++,楼主的代码一点错误都没有。我觉得楼主的代码理论上是没有错误的,定义类型和输入输出类型并没有不同。个人认为应该是编译器的问题。编译器将输出自动默认为char类型,而且不自动转换
2010-09-24 01:34
sfier
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-9-20
收藏
得分:0 
visual studio 2005 我用的
2010-09-24 16:35
zjh171
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-1-15
收藏
得分:0 
究竟应该听谁的啊,我也很郁闷5楼的代码,为什么把2转换为字符,2就自动编程字符 了呢,好蹊跷啊
2011-01-15 22:37
快速回复:while 的一个问题.帮帮忙!
数据加载中...
 
   



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

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