CIN为什么将浮动值分为两个部分
Why will cin split a floating value into two parts?
我对Cin
有问题int main(void)
{
int a;
float b;
cin >> a >> b;
}
当我将浮动号(例如3.14)作为输入时, a
和 b
均未获取完整值(3.14):输出为a = 3,b = 0.14。
我知道cin
会按空格,选项卡或返回将输入分开,但是"点"不会,对吗?
为什么以下代码可以工作?
int main(void)
{
int i=0;
int k=0;
float j=0;
cin >> i >> k >> j; // i =3, j=k=0
}
还有一个问题,编译器将为我们做什么好处?
谢谢!
您已声明a
为int
类型,在这种情况下,您希望它能与"。?
失败限制所获得的输入不能解释为 适当的类型。请注意,某些EOFBIT案件也将设置 失败。
其他提到的您效果很好,您问的问题是什么?您已经cin
ED 3变量您期望在这里有什么期望?0对于float或int。
cin >> a >> b;
给出了3.14的输入,这是点(周期)上的第一个解析,因为点不适合整数的语法。第二个解析以.14的方式拾取,这很好。
cin >> i >> k >> j;
这是有问题的,输入为3.14。第一个解析再次停在点上。第二个解析无法与点重新启动,因此将输入流标记为失败。
在执行I/O。
格式的输入函数的工作非常简单:
- 他们跳过领先的空格(如果有)。
- 他们尝试读取与给定类型匹配的格式。
- 如果读取值失败,因为数据不匹配所需的格式,则它们设置了
std::ios_base::failbit
。如果读取失败,输入不应更改尝试读取的变量(标准输入运算符遵循此规则,但用户定义的输入操作员可能不会)。
您尝试阅读的第一个值是int
。读取int
意味着读取可选的前导符号,然后读取一系列数字(其中,取决于您的设置和给定的值,流可以读取八分或十六进制数,而不是十进制数字)。也就是说,int
接收值3
并在.
的前面停止阅读。
根据您接下来阅读的内容,下一个读取失败或没有:
- 在第一个代码中,您尝试读取以可选符号开头的浮点值,然后是可选的积分零件,然后是可选的数千个分隔器,然后是可选的分数零件,然后是可选指数。在积分或分数部分中,至少需要一个数字。在您的示例中,只有一千个分开的部分。
- 在尝试读取整数时,找到了
.
,这不是int
的有效部分,并且阅读失败。
尝试阅读值后,如果读取操作成功并报告潜在错误,则应始终尝试:
if (in >> value) {
std::cout << "successfully read '" << value << "'n";
}
else {
std::cerr << "failed to read a value from inputn";
}
请注意,在读取失败后,您也可能需要清理,例如,使用
in.clear();
in.ignore();
这首先清除了错误标志(没有此,该流将忽略任何进一步读取数据的尝试),然后忽略下一个字符。
cin
正在读取输入" 3.14",然后要求将其放入整数,然后将其放入float中。
因此,cin
开始阅读,找到" 3",然后找到"。这不是整数。将3存储到a
中并继续。" .14"是有效的浮点,它将其放入b。
然后您要求阅读int
,int
,float
。第二个整数不匹配,cin
停止,但是它仅能工作才能正常工作。实际上,失败。
编译器无法警告您您正在做某件不起作用的事情,因为输入在编译时不知道。
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- Cin 需要两个输入
- 两个 cin / cout 语句合并为一个
- 当我使用 cin 进行两个输入时,如何接受一个输入
- 两个输入C++来自 Bash 的 cin
- 当其中一个字符串来自cin时,无法比较两个字符串.这里怎么了
- 使用cin.ignore()跳过两个空间
- 在C 中使用两个GetLine(CIN,S)
- CIN为什么将浮动值分为两个部分
- 具有两个cin的无限循环
- 连续两个"cin"不起作用
- while 循环不能有两个 CIN 语句吗?
- 如何在c++中使用两个cin语句
- 从cin读取两个字符串并将其写回时出现意外行为
- 辛:等<ENTER>着。两个继续 cin.忽略不起作用