Terminal 在C中将stty设置为原始模式时擦除字符

Terminal 在C中将stty设置为原始模式时擦除字符,terminal,tty,Terminal,Tty,我试图获得一段包含换行符的文本,而不需要用户每次按enter键,直到用户按CTRL+C键,此时下面显示的循环将退出。但使用这种方法的问题在于,一旦终端设置为原始模式,当我按Enter键时,它也会显示那些^M,当我按backspace键时,它会显示^?。如何解决这个问题?我还尝试过给出系统(“/bin/stty raw-echo isig”)但此方法也不起作用(没有字符显示为i类型) 此外,在末尾生成的字符串(str)也没有正确的字符。事实上,当我打印它时,它只打印最后一行。您可以尝试printf

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

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

您可以尝试
printf(“\b\b”)
删除字符,但首先必须检查是否按下了
退格
,您需要找出特定机器中
退格
的代码:

if (ch == 0x7F)         // the code for backspace on my machine
    printf("\b \b");    // simulate erasing a character using two '\b' and a space ' '
或者,您可以使用:


为什么不
putc(str[i])
而不是
printf(“%c”,str[i])
?你不能既吃蛋糕又吃蛋糕。如果你想要生的,你就得到它。问题是,如果你不想要它,为什么要使用原始模式。因为我不想让它等到用户输入每个字符后按enter键,然后再进行处理。在原始模式下,只要我按下任何字符,它就会接受该字符,并且不会等到按下enter键。
if (ch == 0x7F)         // the code for backspace on my machine
    printf("\b \b");    // simulate erasing a character using two '\b' and a space ' '
if (ch == 0x7F)         // the code for backspace on my machine
    printf("\b\33[K");  // clear line from cursor right