[英]C++ Function Skipping Code
我编写了以下代码,可以很好地编译。 但是,当我运行它时,它会跳过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();
}
我认为是因为输入流中还剩下\\n
。 在使用getline
之前尝试cin.ignore()
。 我希望它能起作用。
该代码似乎是在“跳过”对std::getline()
的第二次调用,因为先前对player()
调用是通过std::cin
提取的,从而在流中留下了换行符。 std::getline()
仅读取字符,直到下一个换行符为止-因此似乎跳过的只是std::getline()
由于剩余的换行符而无法输入字符。
解决方法是使用std::ws
清除换行符:
std::getline(std::cin >> std::ws, p[x]);
您的cin
流不会在首次使用时被刷新,并且getline
假定输入已经完成。 您可以使用以下方法刷新它:
cin.clear(); //clear any possible bits
cin.ignore(); //throw away whatever is there left in the stream
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.