gpt4 book ai didi

terminal - 当 stty 在 C 中设置为原始模式时删除字符

转载 作者:行者123 更新时间:2023-12-02 19:37:41 26 4
gpt4 key购买 nike

我试图获取一段包含换行符的文本,而无需用户每次获取时都按 Enter 键,直到用户按 CTRL+C,此时下面显示的循环将退出。但使用这种方法的问题在于,一旦终端设置为原始模式,当我按 Enter 时它还会显示那些 ^M 并在我按 Enter 时显示 ^?退格键。如何解决这个问题?我也尝试过给 system("/bin/stty raw -echo isig");但是这个方法也不起作用(我输入时没有字符显示)

int main(void)
{
char str[1000] ,c , i=0 ;

system("/bin/stty raw") ;
while(1)
{
c = getchar();
str[i++] = c ;
if(c==3)break;
if(c==13)puts("\r");
}

system("/bin/stty cooked") ;

for(i=0 ;str[i] ; i++) printf("%c",str[i]) ;
}

此外,末尾生成的字符串 (str) 也没有正确的字符。事实上,当我打印它时,它只打印最后一行。

最佳答案

你可以尝试printf("\b\b");来删除一个字符,但首先你必须检查退格是否被按下,你需要找出您特定机器中的 backspace 代码:

if (ch == 0x7F)         // the code for backspace on my machine
printf("\b \b"); // simulate erasing a character using two '\b' and a space ' '

或者您可以使用VT100 escape codes :

if (ch == 0x7F)         // the code for backspace on my machine
printf("\b\33[K"); // clear line from cursor right

关于terminal - 当 stty 在 C 中设置为原始模式时删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46200681/

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