C++ 一点C++;请帮忙(重复输出)
所以我有这个代码:C++ 一点C++;请帮忙(重复输出),c++,C++,所以我有这个代码: #include <iostream> #include <cstdlib> using namespace std; int main() { int x; x=rand(); int guess; do{ cout<<"Enter your guess:"; cin>>guess; if(guess==x)cout<<"You g
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int x;
x=rand();
int guess;
do{
cout<<"Enter your guess:";
cin>>guess;
if(guess==x)cout<<"You got it ! ;)\n";
else {
cout<<"Wrong(";
if (guess<x) cout<<"too small)\n";
else cout<<"too big)\n";
}
} while (guess != x);
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int x;
x=兰德();
智力猜测;
做{
库特格斯;
如果(guess==x)cout查看,您将看到int
最多只能容纳21474836471。当您尝试输入大于数据类型所能容纳的数字时,std::cout
失败,然后在下一个循环中再次尝试处理,这也失败,并以无限循环发送给您
您可以通过使用更大的数据类型来解决问题
1-int的大小取决于您的机器,请检查int可以容纳的范围列表您希望此代码始终成功:
cin>>guess;
从std::ios_base
派生的类型,如std::cin
可能会进入错误状态
您可以在bool
上下文中使用流来完全处理此问题
}while (cin && guess != x);
如果你对到底发生了什么感到好奇,可以去看看,有人在从
std::cin
读取太大的数字时遇到了非常类似的问题。第二张海报“int main”很好地总结了这一点(为此重新格式化了一点):
cin.fail()
检测输入的值是否符合定义的值
但如果cin.fail()
为true,则表示:
- 输入的值与变量不匹配
- 该变量将不受影响
- 河道内的水流仍然断流
- 输入的值仍在缓冲区中,将用于下一个
语句cin>>变量
- 通过
cin.clear()
- 使用
cin.ignore(std::numeric\u limits::max(),'\n')清除缓冲区。
注意:语句“变量不会受到影响”不是真的,至少对于我的系统(g++4.6)。该变量实际上设置为最大可能值。这使得在流中保留输入的值更不容易解释…整数溢出是我的猜测…调试算法的提示,而不是使用随机数使用特定的数字。这样您就知道答案是什么,并且可以正确测试。我通过更改“int guess”来修复它到“长整数猜测”。谢谢您的时间!非常感谢!
int
不必是32位。它可以是16位或更高。@chris这是真的,但在今天的大多数机器上,它是32位或更高。(写下来会使运算更加混乱,偏离问题)我仍然觉得这比撒谎要好,因为OP认为他们确信这是对的,所以会传播同样的谎言。当因为错误的信仰而产生争论时,肯定会有更多的困惑。这来自经验。@chris我在最后放了一个免责声明。哦,我明白了!非常感谢你的提示我会记住的!放进一个if(cin)
在您提取数据之前或之后,在这种情况下都没有帮助,因为它不会将数据发送到错误状态。您可以自己尝试。