gpt4 book ai didi

c - "Freezing"控制台中的输入行并打印在上面的行上?

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:13 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以“卡住”输入行,以便在 c 中将输入和输出彼此分开。例如,我的控制台输出目前是这样的:

1 OutputLine1
2 OutputLine2

但我希望它是这样的:

1 OutputLine1
2 OutputLine2
3 Enter a Command:

我希望它能够随着程序接收数据流而改变。所以当它运行时它会是这样的

1 OutputLine1
2 OutputLine2
3 OutputLine3
4 Enter a Command:

要更改为:

1 OutputLine1
2 OutputLine2
3 OutputLine3
4 OutputLine4
5 Enter a Command:

我目前对所有输出都使用 printf(),但在这种情况下似乎行不通。我可以使用任何其他打印/输入库吗?

提前致谢!

最佳答案

这将适用于大多数终端(特别是在 xterm 中),我认为它比设置 curses 更容易:

#include <stdio.h>
#include <unistd.h>
#include <termios.h>

int main(){
int lineno=1;
int c;
struct termios old_tio;
struct termios new_tio;
tcgetattr(STDIN_FILENO,&old_tio);
new_tio=old_tio;
new_tio.c_lflag &= (~ICANON&~ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);
setvbuf(stdout,NULL,_IONBF,0);
while(1){
printf("%4d Enter a command: ",lineno);
c=getchar();
printf("\033[2K\033[50D%4d Command was %c\n",lineno++, c);
if(c=='q'){
break;
}
}
tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);
return 0;
}

输出看起来像 OP 想要的:

evaitl@evbb ~/se $ ./foo 
1 Command was a
2 Command was b
3 Command was c
4 Command was d
5 Command was q
6 Enter a command:

引用:unbuffered IO

vt102 escapes

关于c - "Freezing"控制台中的输入行并打印在上面的行上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com