用“|”打破Cpp循环

时间:2013-08-02 01:43:20

标签: c++ string types int type-conversion

我的代码读取无限量的整数,一次两个:while (cin>>a>>b)

我希望在输入|并将其分配给ab时,循环中断。

ab都应声明为int。然后我会比较:ab ==int('|')

最初将'a'和'b'定义为char类型,让我可以解决问题但不理想。

这是Stroustrup的使用C ++的原则和实践(第124页)中的第4章练习。

我想我明白将|读入int变量是试图将string转换为int(不可接受?)。 Stroustrup说要在他的演习中使用这个角色来结束循环,但是当他在书中提到它时,他没有解释他是如何使用它的。实际上是否有一种方法可以根据需要使用|字符,只使用书中讨论的基本代码?非常感谢提前。

1 个答案:

答案 0 :(得分:4)

没有必要使用任何特定字符 - 任何非数字,非空白字符都会破坏循环。

执行cin >> a >> b时,正如您所知,它按顺序将两个以空格分隔的整数读入ab。表达式返回 cin对象,因此整个表达式的值为cin。这一点很重要。

在布尔上下文中评估cin时(如if语句或while循环中),它等同于调用!cin.fail()。也就是说,当流处于良好状态时,cin将评估为true,但在出现错误时评估为false

cin尝试将|字符读入int变量时,该操作没有意义,因此失败。然后cin设置其失败标志。由于设置了失败标志,cin.fail()将返回true,当cin被评估为布尔值时,它将计算为false,并且循环结束。

应该注意的是,在cin进入失败状态后,需要重置其状态,并且可以再次使用cin之前丢弃的任何不可用输入:

cin.clear(); // reset state flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // discard all input up to next newline