C ++函数跳过代码

时间:2014-03-17 02:25:37

标签: c++ global-variables

我编写了以下代码,编译得很好。但是,当我运行它时,它会在第二次调用函数时跳过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();
}

3 个答案:

答案 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