全局变量- c++函数跳过代码

global variables - C++ Function Skipping Code

本文关键字:代码 函数 c++ 全局变量      更新时间:2023-10-16

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

您的cin流在第一次使用时没有刷新,getline假设输入已经完成。您可以使用:

清除它
cin.clear(); //clear any possible bits
cin.ignore(); //throw away whatever is there left in the stream

代码似乎"跳过"了对std::getline()的第二次调用,因为之前对player()的调用通过std::cin执行了提取,在流中留下了一个换行符。std::getline()只读取字符,直到下一个换行符-所以什么看起来是跳过只是std::getline()未能输入字符,因为剩余的换行符。

解决方案是使用std::ws: 清除换行符。
std::getline(std::cin >> std::ws, p[x]);