我有一个C程序等待用户输入
#include <stdio.h>
int main()
{
getchar();
return 0;
}
现在我运行它,输入一些汉字,如测试测试
。然后现在我点击退格键,我发现我不能完全删除这些字符(一些空白)
我发现termios
有一个标志设置IUTF8
,但为什么它不工作?
2022年12月31日更新:
我试着更详细地描述我的问题,我有一个这样的程序
现在我运行它,并输入一些中文字符(没有回车键)
然后我不停的按退格键(直到什么都擦不掉),但是一半的内容仍然显示在我的屏幕上,这太不正常了,我该怎么做才能让擦除效果好呢?
我知道这对你来说是个愚蠢的问题。我只是想在输入一些UTF8字符(比如汉字)时让它更舒服一些。
我发现shell可以很好地处理这个问题,我该怎么做才能让我的程序执行相同的功能呢?
顺便说一下,这是我的语言环境输出
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=
1条答案
按热度按时间bvjxkvbb1#
使用GNU readline可以提供一个类似shell的界面,带有Tab自动完成功能、正确的输入处理等。
要编译下面的示例程序,请确保您已经安装了
libreadline-dev
包。运行该程序所需的readline库已经安装,因为许多默认安装的应用程序都需要它。当使用GNU readline库时,该库接管了标准输入,并在终端(termios)级别处理字符删除(和许多其他事情)。它在文件和管道输入方面也工作得非常好,例如
bash
shell就使用它进行交互式输入。