我正在使用《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 吗?怎么了 ?
cin 上的 >> 运算符知道它尝试提取和解析的变量的类型。在您的情况下,只要提取的字节继续构成整数, cin 就会从标准输入读取。一旦遇到任何非整数字符,cin 就会完成整数的读取。确定何时完成解析的障碍取决于您尝试通过 cin 上的 >> 运算符提取的变量类型。num_get::get 是 cin 上的 >> 运算符内部调用的内容,用于根据预期的格式解析变量。
以下是有关 cin 实现的 >> 运算符的参考链接(其中包含很多细节):http ://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
| 归档时间: |
|
| 查看次数: |
3568 次 |
| 最近记录: |