c++ - 如何在清除屏幕之前等待键盘输入(getchar 不工作)

标签 c++ linux

我正在尝试编写一个程序,在清除屏幕并移动到下一个屏幕之前,我会在其中显示一些内容。我正在使用 system("clear") 来清除屏幕。但我注意到它清除屏幕的速度太快了。我的意思是,即使我输入了 getchar() ,它也不会等待键盘输入并执行下一个命令。我想不通为什么!

这是我的暂停宏代码,它应该等待击键:

#define pause() \
do{ \
    cout<<"Press any key to continue";\
    getchar();\
} while(0);

下面是使用上述宏的代码,但下面的代码不会在清屏前等待按键!

void registerUser()
{
    string uid,passwd;
    cout <<"Enter UID: ";
    cin >> uid;
    cout<<" Enter Password: ";
    cin>>passwd;
    bool ret = addUser(uid,passwd);
    if (ret == false)
    {
        cout<<"User "<< uid <<" already exists\n"; // This message is not displayed
    }
    else
    {
        cout<<"User " << uid <<" Successfully added\n"; // This message is not displayed
    }
    pause();  // Program does not wait here as expected
    system("clear");  // Screen is cleared immediately !!
}

最佳答案

std::cin 从输入流(通常是 stdin)读取字符。它在读取分隔符时停止,默认分隔符是 \n

所以当它读取一个序列时,流中仍然有一个尾随换行符!

getchar() 将读取 \n,然后返回。这就是为什么没有停顿。您必须从流中删除换行符:

std::cin.ignore(); //Discards 1 character from the stream

关于c++ - 如何在清除屏幕之前等待键盘输入(getchar 不工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38939254/

相关文章:

linux - 使用节点脚本代替 bash

c++ - 从 engOpen(..) 启动 matlab,被通知引擎被关闭

C++:编译时检查匹配的函数调用对?

linux - 如何过滤其他用户使用的主机

linux - Linux内核 'do_select'函数内部无限循环

linux - 在没有连接设备的情况下设置 I2C 地址

c - 在简单标量模拟器中使用时钟周期?

c++ - 将全局引用计数资源与原子同步——在这里放宽合适吗?

c++ - 为什么第一次调用 readline() 会减慢对 fnmatch() 的所有后续调用?

c++ - 关于调用具有专门模板的类的混淆