Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从标准输入将原语类型的值读入变量_C++_Inputstream - Fatal编程技术网

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
仍保留在输入流上