#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)
不起作用,但它可以在第二个代码中工作吗?我很困惑。
答案 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字符。
谢谢大家回答我的问题。