我有以下功能:
void playersetup(string &name){
char verify;
cout<<"Enter player name: ";
getline(cin,name);
cout<<endl<<"Your name is: " + name + ", is that correct? (Y for yes, any other key for no): ";
cin>>verify;
if ((verify=='y')||(verify=='Y')) {
verify=='n';
} else {
playersetup (name);
}
}
它询问玩家的名字,要求用户验证这是他们想要的名字,如果不是,它会调用自己重新开始。然而,这是输出的样子:
输入玩家姓名:
用户输入:John Smith
您的名字是:John Smith,对吗? (Y 表示是,任何其他键表示否):
用户输入:n
输入玩家姓名:
(用户没有机会输入任何内容)
您的名字是: ,对吗? (Y 表示是,任何其他键表示否):
这里是否存在逻辑错误或我缺少的 getline(cin) 的某个方面?
最佳答案
换行符保留在标准输入中,因为 >> char
仅消耗用户的单个字符响应。当下次调用 std::getline()
时,它会读取换行符;一个空行。在再次询问用户名称之前使用或跳过换行符:
#include <limits> // for 'std::numeric_limits'
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
关于c++ - getline(cin) 行为异常 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342274/