什么终止将输入读取到 int 中

pie*_*lli 2 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"; 
Run Code Online (Sandbox Code Playgroud)

在这里,如果我输入 1i cin 会将 1 读入长度,将 i 读入单位,为什么?我不应该使用空格来终止读取 int 吗?怎么了 ?

Mar*_*ser 5

cin 上的 >> 运算符知道它尝试提取和解析的变量的类型。在您的情况下,只要提取的字节继续构成整数, cin 就会从标准输入读取。一旦遇到任何非整数字符,cin 就会完成整数的读取。确定何时完成解析的障碍取决于您尝试通过 cin 上的 >> 运算符提取的变量类型。num_get::get 是 cin 上的 >> 运算符内部调用的内容,用于根据预期的格式解析变量。

以下是有关 cin 实现的 >> 运算符的参考链接(其中包含很多细节):http ://www.cplusplus.com/reference/istream/istream/operator%3E%3E/