我的代码读取无限量的整数,一次两个:while (cin>>a>>b)
。
我希望在输入|
并将其分配给a
或b
时,循环中断。
a
和b
都应声明为int
。然后我会比较:a
或b
==int('|')
最初将'a'和'b'定义为char
类型,让我可以解决问题但不理想。
这是Stroustrup的使用C ++的原则和实践(第124页)中的第4章练习。
我想我明白将|
读入int变量是试图将string
转换为int
(不可接受?)。 Stroustrup说要在他的演习中使用这个角色来结束循环,但是当他在书中提到它时,他没有解释他是如何使用它的。实际上是否有一种方法可以根据需要使用|
字符,只使用书中讨论的基本代码?非常感谢提前。
答案 0 :(得分:4)
没有必要使用任何特定字符 - 任何非数字,非空白字符都会破坏循环。
执行cin >> a >> b
时,正如您所知,它按顺序将两个以空格分隔的整数读入a
和b
。表达式返回 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