当我们输入第一个值y
作为浮点数时,例如2.0,打印答案时不允许输入第二个值z
。为什么呢?
#include <iostream>
#include <conio.h>
using namespace std;
int add(int x,int y)
{
int result;
result=x+y;
return result;
}
int main()
{
int x;
int y;
int z;
cin>>y>>z;
x=add(y,z);
cout<<x;
getch();
}
答案 0 :(得分:1)
从流中提取将尝试使用所有输入,只要它的格式对您要提取的类型有效。例如,使用此代码
int x, y;
cin >> x >> y;
和这个输入:
123.456
它将在x
中读取123并完成。然后,它将尝试读取y
中的整数。由于123
已被提取,因此可用的第一个字符为'.'
。这不是一个有效的整数,因此将在流上设置failbit
标志(您可以通过调用cin.fail()
来检查)并且所有进一步的提取都将失败,除非您通过调用{{1清除错误标志}}
如何解决这个问题取决于你想要做什么。您可以改为使用双打并检查它们的小数部分是否为0.您可以输入整行输入,将其放入字符串流中,提取整数并检查流中是否还有垃圾。
在任何情况下,检查提取是否成功!始终在某些布尔上下文中使用流提取
cin.clear()
至少明确检查errros:
if (cin >> x) { // <-- implicit conversion of the stream to bool
// ok, it's safe to use x
} else {
// an error occured
}