使用 std::cin.getline() 输入一个字符数组,读取整数不起作用


#include <iostream>
int main()
{
    using namespace std;
    char a[50];
    int y;
    cin >> y;
    cin.getline(a, 40); 
    cout << "y= " << y << "n"<< "a=" << a << endl;
}

运行时,我输入 45,输入。然后输出为

y= 45
a=

我没有机会输入a.但是当我使用此代码时:

#include <iostream>
int main()
{
    using namespace std;
    char a[50];
    int y;
    cin.getline(a, 40);
    cin >> y;
    cout << "y= " << y << "n" << "a=" << a << endl;
}

我用 45 运行它,输入,钓鱼,进入。其输出

y= 45
a=fish

那么,谁能解释为什么cin.getline(a,40)在第一个代码中不起作用,但它在第二个代码中有效?我一头雾水。

在第一种情况下,输入仍将包含一个换行符,然后由以下cin.getline()调用使用,该调用读取到下一个换行符。然后程序终止。

在第二种情况下,cin.getline()将读取第一行直到换行符,然后读取之后的第一个整数。

因此,您的问题是cin >> y不会消耗换行符。您可以通过对cin.getline()进行第二次调用来补偿这一点:

#include <iostream>
int main()
{
    using namespace std;
    char a[50];
    int y;
    cin >> y;
    cin.getline(a, 1);
    cin.getline(a, 40); 
    cout << "y= " << y << "n"<< "a=" << a << endl;
}
#include <iostream>
int main()
{
    using namespace std;
    char a[50];
    int y;
    cin >> y;
    cin.get();
    cin.getline(a, 40); 
    cout << "y= " << y << "n"<< "a=" << a << endl;
}

我发现这个,它有效。因此,只需在 cin>> y 之后添加 cin.get((,它将消耗 个字符。

谢谢大家回答我的问题。

最新更新