整形数 输入字母时的问题

vv1133 2010-01-16 08:13:25
#include<iostream>

using namespace std;

int main()
{
int i;
do{
cin>>i;
switch(i)
{
case 1:
cout<<"1"<<endl;
break;
case 2:
cout<<"2"<<endl;
break;
default:
cout<<"ot"<<endl;
break;
}
}while(i!=1&&i!=2);
return 0;
}

当不小心输入字母的时候,屏幕会刷屏,我在网上查了下,好像能用getchar()和cin.clear()来解决,谁能解释出现这个刷屏是什么原因啊?
我是用g++编译的,还有用C语言scanf,gcc编译也一样
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihan6415151528 2010-01-17
  • 打赏
  • 举报
回复
int main() 
{
char ch;
do{
ch = getchar();
getchar();
switch(ch)
{
case '1':
cout < < "1" < < endl;
break;
case '2':
cout < < "2" < < endl;
break;
default:
cout < < "ot" < < endl;
break;
}
}while(ch == '1' || ch == '2');

getchar();
return 0;
}
tony_chenypc 2010-01-17
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;

int main()
{
char ch;
do{
ch = getchar();
getchar();
switch(ch)
{
case '1':
cout << "1" << endl;
break;
case '2':
cout << "2" << endl;
break;
default:
cout << "ot" << endl;
break;
}
}while(ch == '1' || ch == '2');

getchar();
return 0;
}
niejimaoo 2010-01-16
  • 打赏
  • 举报
回复
mark之
cocat 2010-01-16
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

int main()
{
int i;
do{

cout<<"input a interger(1-2):"<<endl;
cin>>i;
cin.ignore();//清空缓冲区用的是这个,cin.clear()是恢复IO
switch(i)
{
case 1:
cout<<"1"<<endl;
break;
case 2:
cout<<"2"<<endl;
break;
default:
cout<<"ot"<<endl;
break;
}
}while(i!=1 && i!=2);
return 0;
}

这样应该可以了~
herman~~ 2010-01-16
  • 打赏
  • 举报
回复
恩 每次while循环之前需要清空一下缓冲区cin.clear()
kingstarer 2010-01-16
  • 打赏
  • 举报
回复
因为你输入一个字母 cin发现不是要的字符,于是把这个字符退出输入缓冲 不再工作

下次循环又读到了这个退回的字母 于是就杯具了

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧