繁体   English   中英

C ++函数跳过代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM