如何等待键盘输入之前清除屏幕(getchar不工作)
How to wait for keyboard input before clearing screen (getchar not working)
我正在尝试编写一个程序,在清除屏幕并移动到下一个屏幕之前,我正在显示一些东西。我使用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);
,它将忽略直到并包括下一个换行符的所有字符。
或者不要清除屏幕,这是非常好的,能够滚动回去,看看你在过去做什么,清除屏幕破坏了这一点。
相关文章:
- 清除屏幕上的特定位置
- 如何使用 Eclipse IDE 清除屏幕
- 如何使用 Xcode 在运行时C++清除屏幕
- SDL2:如何在不清除屏幕的情况下渲染
- 如何清除串行屏幕
- 如何在C 编写的控制台应用程序中清除屏幕
- 在 GLUT、c++ 中按键时清除屏幕
- 清除C++/XCode中的屏幕
- SFML window.clear()未清除屏幕
- 如何在每次循环迭代之前清除屏幕
- c++linux控制台清除屏幕的一个区域
- 如何在 SDL 2.0 中清除屏幕的一部分
- 诅咒库:为什么 getch() 会清除我的屏幕
- 使用其他编译器在C++中清除屏幕
- 擦除屏幕上的几行,而不是清除整个屏幕
- C++中的清除屏幕命令
- 用c++清除屏幕
- 使用C++清除屏幕
- 是否可以阻止CGDB在退出时清除屏幕
- 清除终端屏幕