使用std :: cin.getline()无法读取整数来输入char数组

时间:2014-03-09 15:43:51

标签: c++ string visual-c++ char

#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)不起作用,但它可以在第二个代码中工作吗?我很困惑。

2 个答案:

答案 0 :(得分:2)

在第一种情况下,输入仍将包含换行符,然后由以下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;
}

答案 1 :(得分:1)

#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&gt;&gt;之后添加cin.get() y,它会消耗\ n字符。

谢谢大家回答我的问题。