2

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

|我希望循环在输入并分配给aor时中断b

a并且b都应该声明为int. 然后我会比较:ab ==int('|')

最初将 'a' 和 'b' 定义为char类型,可以让我绕过这个问题,但并不理想。

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

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

4

1 回答 1

4

没有必要使用任何特定字符 - 任何非数字、非空白字符都会中断循环。

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

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

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

需要注意的是,cin进入fail状态后,需要重置其状态,之前丢弃的任何不可用的输入cin都可以再次使用:

cin.clear(); // reset state flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // discard all input up to next newline
于 2013-08-02T02:06:55.213 回答