此程序输入Q时为何会死循环?

azhui3000 2005-03-03 06:07:16
#include<iostream>
using namespace std;

int main()
{
int x,y,z,m;


while(x!='q')
{
cout<<"enter x(enter q to exit):";
cin>>x;
if(x=='q')break;

cout<<"enter y: ";
cin>>y;
m=x/y;
z=x%y;
cout<<x<<"%"<<y<<"is: "<<z<<"\n";
cout<<x<<"/"<<y<<"is:"<<m<<"\n";

}
return 0;
}

大概已经知道是因为X的类型不对,但为何类型不对就会死循环呢?
如果我要先是int x;cin>>x;
再if(????)break;当x的值不是整型时中止程序,使其不会死循环,那这个????该怎么写呢?
...全文
314 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
azhui3000 2005-03-04
  • 打赏
  • 举报
回复
结贴
xiaosilent 2005-03-03
  • 打赏
  • 举报
回复
同感
liuren0805 2005-03-03
  • 打赏
  • 举报
回复
其实简单点就是没有满足退出条件!
azhui3000 2005-03-03
  • 打赏
  • 举报
回复
也谢谢月之海
azhui3000 2005-03-03
  • 打赏
  • 举报
回复
languagec的办法刚试过,运行正常了。
nodummy解说得很清楚,
谢谢大家了
zengwujun 2005-03-03
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

int main()
{
int x,y,z,m;

cout<<"enter x(enter q to exit):";
while(cin>>x)
{
cout<<"enter y: ";
if(cin>>y)
{
m=x/y;
z=x%y;
cout<<x<<"%"<<y<<"is: "<<z<<"\n";
cout<<x<<"/"<<y<<"is:"<<m<<"\n";
}
cout<<"enter x(enter q to exit):";
}
return 0;
}
darkstar21cn 2005-03-03
  • 打赏
  • 举报
回复
实际上是你输入错误以后就会进入死循环。
zengwujun 2005-03-03
  • 打赏
  • 举报
回复
int x;
cin>>x;
从标准输入读入一个整数值,如果成功,则把该值拷贝到x中;
如果读入一个无效值,istream对象被放置到一种错误的状态中,
并且对于值的所有读入动作都将停止。

所有说,当你读入q,将使istream对象被放置到一种错误的状态,
对于值的读入动作将停止。cin>>x语句不再有效,x,y将保持原值,
而while循环无法结束,就将不停的输出
nodummy 2005-03-03
  • 打赏
  • 举报
回复
上面有点没说清楚:

当你从键盘输入一个非数字字符给x的时候,会导致operator>>的调用失败,并且这个非数字字符并没有从输入流中删除,while下一次循环的时候仍然会去读取这个字符,结果就导致operator>>的又一次失败,周而复始,结果就造成了死循环。
nodummy 2005-03-03
  • 打赏
  • 举报
回复
cin给你的x里面写入的值不对,因为basic_istream里面的operator>>是一个类模板的成员模板,所以当你写入一个非数字字符给x的时候,显然会导致operator>>的失败,并且此时q没有从输入流中被删除,结果就造成了死循环。

检测cin的operator>>调用是否成功是一个好办法,明显可以避免这样的问题了。

另外如果想依靠类型来解决这个问题的话,可以把x修改为string类型,然后判断x的数值的时候使用atoi(x.c_str());这样也可以解决这个问题
dongpy 2005-03-03
  • 打赏
  • 举报
回复
int x;
cin>>x;
要求输入一个整数才行!
dongpy 2005-03-03
  • 打赏
  • 举报
回复
把x设成char型
arrowcy 2005-03-03
  • 打赏
  • 举报
回复
居然会死循环,原因很怪,不过学到了一点,
如果往int型数据里面输入一个字符就会导致后面的所有cin失效
catally 2005-03-03
  • 打赏
  • 举报
回复
int x;cin>>x;
这个时候x为输入的第一个字符ascii值,肯定是int咯
languagec 2005-03-03
  • 打赏
  • 举报
回复
#include <iostream.h>
void main()
{
int x;
while(cin>>x)
{
cout<<x;
}
}

65,212

社区成员

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

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