Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在终端内隔离标准输入和标准输出_C_Stdout_Stdin_Ncurses_Ansi Escape - Fatal编程技术网

C 在终端内隔离标准输入和标准输出

C 在终端内隔离标准输入和标准输出,c,stdout,stdin,ncurses,ansi-escape,C,Stdout,Stdin,Ncurses,Ansi Escape,我正在为我的systems类项目开发一个C语言的CLI程序,它需要在维护命令提示符的同时显示传入的文本。不管输入什么,输入的文本都会被识破。在其他应用程序中,我看到传入的文本打印在提示符本身的上方(或下方)。有没有办法在ANSI转义中实现这一点?ncurses似乎有些过分。您可以打印\r来删除提示:它将光标返回到当前行的开头。然后,您可以打印输出,后跟一些空格,以清除任何剩余的输入字符、换行符,然后重新打印提示 使用ANSI序列或特定于终端的库,您可以做更多的事情,但我认为,仅使用ASCII就可

我正在为我的systems类项目开发一个C语言的CLI程序,它需要在维护命令提示符的同时显示传入的文本。不管输入什么,输入的文本都会被识破。在其他应用程序中,我看到传入的文本打印在提示符本身的上方(或下方)。有没有办法在ANSI转义中实现这一点?ncurses似乎有些过分。

您可以打印
\r
来删除提示:它将光标返回到当前行的开头。然后,您可以打印输出,后跟一些空格,以清除任何剩余的输入字符、换行符,然后重新打印提示

使用ANSI序列或特定于终端的库,您可以做更多的事情,但我认为,仅使用ASCII就可以可靠地做到这一点。当然,除了打印242个空白行以重新绘制整个屏幕之外


编辑:对不起,我没有正确回答ANSI部分。使用光标移动控制代码和在现有字符上打印空间,您几乎可以做任何事情,并且有一些方便的操作可以帮助您,例如“删除行”。但是请记住,Windows在XP后不能很好地运行,其他系统也不能保证运行良好。

首先,如果您想在打印时保持提示,就不能使用scanf之类的工具。您必须截获键盘事件或使用非等待方法来获取输入。然后,您可以获取终端行数(n)并打印输出的最后n-1行,然后显示提示

my2c