C++ 从标准输入将原语类型的值读入变量
假设我有下面的变量定义,我试图从标准输入中读取值C++ 从标准输入将原语类型的值读入变量,c++,inputstream,C++,Inputstream,假设我有下面的变量定义,我试图从标准输入中读取值 int ia = 3; double da = 0; std::cin >> ia >> da; 现在,我在标准输入中键入以下值,-4.23-5.01 如果我现在打印ia和da,da是.23,ia是-4 为什么C++将-4.23分解为整型成分和浮点成分,换句话说,为什么23的输入流仍然保留在后续的读取中?-4.23不是简单地被截断为-4,然后读入到ia 现在是一个不同的场景,假设我有与上面相同的代码段,但这次我在标准输
int ia = 3;
double da = 0;
std::cin >> ia >> da;
现在,我在标准输入中键入以下值,-4.23-5.01
如果我现在打印ia
和da
,da
是.23,ia
是-4
为什么C++将-4.23分解为整型成分和浮点成分,换句话说,为什么23的输入流仍然保留在后续的读取中?-4.23不是简单地被截断为-4,然后读入到ia
现在是一个不同的场景,假设我有与上面相同的代码段,但这次我在标准输入流(只是控制台)中输入了数字.23
。ia
存储0(好的,这似乎遵循上述行为),但这次da
包含0?似乎在这种情况下,0.23
被截断并作为0读入,而.23没有像上面那样读入da
我很难理解在这种情况下到底应该发生什么。这里发生了两件不同的事情。简单。您告诉代码输入一个十进制值,它确实输入了。
-4.23
中的“.”不是整数,因此它停止并将“-4”分配给整数
流指针位于“.23”,这是一个有效的double
数字;因此,它将空间中的所有内容都分配给变量。所以您的double
变量包含“.23”
尝试更改变量,使其具有相同的类型,或更改输入数据,使第一项为整数
为什么C++将-4.23分解成整数成分和浮点成分,换句话说,为什么23?在后续流的输入流中保留。< /P>
您告诉流输入将包含一个整数和一个double,并且它在将输入解析为您指定的内容时做得最好
流开始读取一个int
,读取-4
,当它看到一个点
时,意识到无法进一步读取数字,并在该点处停止。之后,你告诉C++读取一个双。它看到.23
后跟一个空格,并将其解释为完全合法的双值
假设我有与上面相同的代码,但这次我输入了数字。23在标准输入流中(这只是控制台)ia
存储0(好的,这似乎遵循上述行为),但这次da
包含0
这是因为当您请求整数输入时,流无法合法地将任何内容解析为ia
。这将使流进入错误状态,这意味着在重置错误标志之前,无法进行进一步的输入
std::cin >> ia
跳过任何空白字符。然后,它尝试从std::cin
中提取int
。如果它发现一个字符不能用作int
的一部分,它将停止
在您的情况下,-4
之后的
不能用作int
的一部分。因此,提取就到此为止。之后,.23-5.01
仍保留在流中
然后进入>da
部分。因为.23
是有效的double
,提取并存储在da
中。提取在空白处停止。之后,-5.01
仍保留在输入流上