我正在使用本书学习C ++:使用C ++编程原理和实践。在第3章的最后,作者询问什么终止读取输入到int中,我认为输入到输入的读取在您输入空格时终止,就像字符串类型一样,但在编写此程序后我有一些疑问:
constexpr double cm_per_inch = 2.54;
double lenght = 1;
char unit = 0;
cout << "Please enter a lenght followed by a unit (c or i):\n";
cin >> lenght >> unit;
if (unit == 'i')
cout << lenght << "in == " << cm_per_inch * lenght << "cm\n";
else
cout << lenght << "cm == " << lenght / cm_per_inch << "in\n";
这里如果我输入输入1i cin将读取1进入长度并进入单位,为什么?我不应该使用空格来终止读入int吗?怎么了 ?
答案 0 :(得分:4)
&gt;&gt; cin上的operator知道它试图提取和解析的变量的类型。在您的情况下,只要提取的字节继续构成一个整数,cin就会从标准输入读取。一旦遇到任何非整数字符,cin就会读取整数。决定解析何时完成的障碍取决于您尝试通过&gt;&gt;提取的变量类型。关于cin的操作员。 num_get :: get是&gt;&gt; cin上的operator在内部调用根据预期的格式解析变量。
以下是有关&gt;&gt;的参考资料的链接cin实现的运算符(它详细介绍):http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
答案 1 :(得分:1)
输入流机制不仅在空格或文件结尾分隔输入,而且对于任何字符与要读入的类型的格式要求不匹配。在整数上使用>>
运算符时,流会将格式委派给“facet”类,该类包含特定于处理int
格式的信息。当facet找到一个不能进入整数的字符时,它会停止读取并存储到目前为止读取的整数中已读取的内容。
答案 2 :(得分:1)
要终止字符串输入,您需要一个空格,即空格,换行符和制表符。
(见第64页)
要终止双倍,您可以键入任何不是有效双精度值的内容
(见第121页)
要终止循环,您需要一个输入结束字符串:
Windows:[Ctrl] + [Z]
Linux:[Ctrl] + [D]
(见第72页)
答案 3 :(得分:1)
字符串的输入由空格终止,即空格,换行符和制表符。 输入整数由任何非数字字符终止。