c++输入的问题

heqichen 2007-01-10 06:36:07
以下代码是我随手写出来的
想要问的是,当我输入字符时,程序就会死循环,原因是什么?如何解决(不用字符处理)?
#include<iostream>
using namespace std;

int main(void)
{
int s=0, n=1;
while (n>0)
{
cout<<"Please input n: ";
cin>>n;
s += n;
}
s -= n;
cout<<s<<endl;
return 0;
}
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
heqichen 2007-02-23
  • 打赏
  • 举报
回复
可以用cin.eof() cin.fail()来判断输入是否错误,如果出错,用cin.clear()来还原标志位,然后用cin.get()来去掉多余的字符
htqx 2007-01-10
  • 打赏
  • 举报
回复
哦.
io这一块真是很多隐藏的秘密.
凌殿Y_ST 2007-01-10
  • 打赏
  • 举报
回复
可以做个小测试:
=======================================
#include <iostream>
using namespace std;

int main()
{
int a;
for(int i=0; i < 10; i++)
{
cout << "input a =";
cin >> a;
}

int b;
for (int j=0; j < 10; j++ )
{
cout << "input b = ";
scanf("%d",&b);
fflush(stdin); //清除输入缓存
    
}
return 1;
}
凌殿Y_ST 2007-01-10
  • 打赏
  • 举报
回复
cin>>n;
================
这是cin的一种处理方式,当输入被判定为异常时,cin操作的一个标识为置为true,从此所有的cin操作都会被忽略,因为就进入死循环了...

换成scanf("%d",&n);操作时,也要进行 fflush(n)操作才不会死循环,否则也进入死循环...
OOPhaisky 2007-01-10
  • 打赏
  • 举报
回复
开始的时候给s赋一个小于0的数,然后再循环中不断增加n,直到大于0就退出循环了。。。
OOPhaisky 2007-01-10
  • 打赏
  • 举报
回复
但还是没看懂你的逻辑,绝得应该是
while (s<=0)
OOPhaisky 2007-01-10
  • 打赏
  • 举报
回复
while (n>0)
是不是
while (s>0)
啊?

64,648

社区成员

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

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