c++ - getline(cin) 行为异常 (c++)

标签 c++ getline

我有以下功能:

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/

相关文章:

c++ - 使用 getline 从文件读取输入

c++ - Linux 多线程应用程序中的中断生成 SIGSEGV

C++ getline() 在 clear() 之后

ubuntu linux .cpp 中的 c++ 模板

c++ - 如何确定一个整数需要多少字节?

c++ - 在读取文件 C++ 时使用 getline 和 >>

c++ - 使用getline从输入文件打印时如何忽略空行

c++ - getline 和 16h (26d) 字符

c++ - Pthreads 在互斥锁中间死亡

c++ - INFLATE后如何获取原始文件扩展名?