iostream输入问题

时间:2014-03-11 11:44:22

标签: c++ dev-c++

当我们输入第一个值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();
}

1 个答案:

答案 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
}