Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一点C++;请帮忙(重复输出)_C++ - Fatal编程技术网

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)
在您提取数据之前或之后,在这种情况下都没有帮助,因为它不会将数据发送到错误状态。您可以自己尝试。