【发布时间】:2013-11-27 21:33:34
【问题描述】:
我有一个使用 i=getchar(); 扫描用户输入的程序,它可以工作。 为了防止用户每次使用时都必须按 Enter:
tcgetattr(STDIN_FILENO,&old_tio);
new_tio=old_tio;
new_tio.c_lflag &=(~ICANON & ~ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);
然后我重置:
tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);
之后,用户必须输入一些内容。我用了这个:
string userinput;
cin >> userinput;
但控制台不显示输入的文本(在输入时)。我尝试通过以下方式手动重新启用本地回显:
tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);
old_tio.c_lflag |= ECHO;
但是控制台仍然没有显示本地回显 现在是晚上 10 点,我很困,所以我的问题可能很容易回答
【问题讨论】:
-
你确定你最后两行的顺序没有错吗?
-
奇怪。 old_io 确实应该包含 echo 标志,因此您的第一次重置尝试应该很好。您是否尝试过检查 new_ 和 old_ 变量中存储了哪些标志?
-
@woolstar 谢谢!他们的顺序错误..我是如何监督的..请写一个答案,这样我就可以投票,每个人都可以从中受益。大多数人不阅读 cmets