什么终止读取输入到int

时间:2014-11-10 19:56:29

标签: c++

我正在使用本书学习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吗?怎么了 ?

4 个答案:

答案 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)

字符串的输入由空格终止,即空格,换行符和制表符。 输入整数由任何非数字字符终止。