2014-03-04 97 views
1

的说明行为我有以下程序:C++:帮助简单的程序

int a, b; 
while (true) 
{ 
    a = 0; b = 0; 
    cout << "Enter input..." << endl; 
    cin >> a >> b; 
    cout << "You entered:" << endl; 
    cout << a << endl << b << endl; 
} 

现在程序按预期工作时,我提供 预期数字输入(即,“10 20”)。 不过,如果我输入如“AB”一些虚假的输入, 程序进入一个无限循环瓦特/输出如下:

输入输入... 您输入:输入输入.. 。 您输入: ...等等

有人能解释为什么/如何发生的?

+1

如果读操作成功,你不检查(和清除,如果它没有)解析。 – Borgleader

回答

3

CIN需要被刷新......

基本上你无法读取“A B”为数字,你在相同的条件下环绕回来。

,但最好的做法也许应该是读入一个字符串,然后从字符串

+2

为了澄清,在循环的第二次(以及所有未来)迭代中,输入缓冲区仍然包含“a b”,所以'cin'语句立即返回(并失败)。 – MooseBoys

1

看到这篇文章:

Basic Input/Output C++

在发生例如如果用户输入别的东西不能被解释为一个整数上面有什么?那么,在这种情况下,提取操作就会失败。默认情况下,程序继续不设置变量值i

要停止这种情况发生,您应该检查收到的输入是否实际上是一个整数。

如上所述,也许尝试类似stringstream的东西,然后解析字符串。

+1

碰巧,这是我编写这段代码时所遵循的文章。我知道它说这个程序会继续,所以我希望它能够循环,并再次要求我输入。没有意识到,如果前一次调用失败,它会在“cin”中保留输入...导致它重新进行故障转移。 – Cod3Citrus