#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((,它将消耗 个字符。
谢谢大家回答我的问题。