iostream输入问题

iostream input issue

本文关键字:问题 输入 iostream      更新时间:2023-10-16

当我们输入第一个值y作为float,例如。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();
}

从流中提取,只要以您提取的类型有效的格式,它将尝试消耗所有输入。例如,使用此代码

int x, y;
cin >> x >> y;

和此输入:

123.456

它将在x中读取123,然后完成。然后,它将尝试读取y中的整数。由于123已经提取,因此可用的第一个字符是'.'。这不是一个有效的整数,因此将在流上设置failbit标志(您可以通过调用cin.fail()进行检查),除非您通过调用cin.clear()清除错误标志,否则所有其他提取将失败。

如何解决此问题取决于您要做什么。您可以选择双打并检查其小数零件是否为0。您可以采用一整行输入,将其放入弦线中,提取整数并检查流中是否剩下任何垃圾。

无论如何,检查提取成功!始终在某些布尔上下文中使用流提取

if (cin >> x) { // <-- implicit conversion of the stream to bool
    // ok, it's safe to use x
} else {
   // an error occured
}

至少明确检查errros:

cin >> x;
if (cin.fail()) { /* error */ }

输入 float value时,例如 2.0cin输入中的贪婪分配给y的数字尽可能多地分配给y,然后在这里 2,然后寻找第二个数字(y是y是y是一个 .,因为y是一个integer)。由于它找到了.,因此终止并丢弃了其余的输入。
在包含语法错误时编辑了您的代码。

#include<iostream>
using namespace std;
int add(int x,int y)
{
int result;
result=x+y;
return result;
}
int main()
{
int x,y,z;
cin>>y>>z;
x=add(y,z);
cout<<x;
return 0;
}