我编写了以下代码,编译得很好。但是,当我运行它时,它会在第二次调用函数时跳过getline(cin, p[x]);
。谁能告诉我为什么?
以下是代码:
#include "stdio.h"
#include "simpio.h"
#include "strlib.h"
#include "iostream.h"
#include "random.h"
int Hp[2], Atk[2], Ddg[2];
std::string p[2];
void player(int x)
{
cout << "Player name: ";
getline(cin, p[x]);
cout << "\tHp: ";
cin >> Hp[x];
cout << "\tAtk: ";
cin >> Atk[x];
cout << "\tDdg: ";
cin >> Ddg[x];
}
main()
{
string go;
player(0);
player(1);
cout << "Go? (Yes/No): ";
cin >> go;
cin.get();
}
答案 0 :(得分:2)
我认为是因为输入流中还剩下\n
。
在使用cin.ignore()
之前尝试getline
。我希望它有效。
答案 1 :(得分:1)
代码似乎是&#34;跳过&#34;第二次调用std::getline()
,因为之前对player()
的调用通过std::cin
执行了提取,该提取在流中留下了换行符。 std::getline()
只会在下一个换行符之前读取字符 - 所以看起来跳过的只是std::getline()
因为剩余的换行符而无法输入字符。
解决方案是使用std::ws
清除换行符:
std::getline(std::cin >> std::ws, p[x]);
答案 2 :(得分:1)
您的cin
信息流在首次使用时尚未刷新,而getline
则表示已完成输入。您可以使用以下方法将其清除:
cin.clear(); //clear any possible bits
cin.ignore(); //throw away whatever is there left in the stream