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

How to wait for keyboard input before clearing screen (getchar not working)

本文关键字:屏幕 清除 工作 getchar 输入 何等待 等待 键盘      更新时间:2023-10-16

我正在尝试编写一个程序,在清除屏幕并移动到下一个屏幕之前,我正在显示一些东西。我使用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 existsn"; // This message is not displayed
    }
    else
    {
        cout<<"User " << uid <<" Successfully addedn"; // 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

getchar "will work",问题是,在你的情况下,你正在阅读cin >> passwd;留下的换行符。

解决这个问题的合适方法是cin.ignore(1000, EOF);,它将忽略直到并包括下一个换行符的所有字符。

或者不要清除屏幕,这是非常好的,能够滚动回去,看看你在过去做什么,清除屏幕破坏了这一点。