我试图获取包含换行符的文本段落,而无需用户每次getch时按Enter键,直到用户按下CTRL + C,此时下面显示的循环将退出。但是使用这种方法的问题是,一旦终端设置为原始模式,当我按Enter键时它也会显示^M
,并在我按^?
时显示backspace
。如何解决这个问题?我也试过给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)也没有正确的字符。事实上,当我打印它时,它只打印最后一行。
答案 0 :(得分:0)
您可以尝试printf("\b \b");
删除字符,但是首先必须检查是否按下了backspace
,您需要在自己的计算机中查找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