【发布时间】:2018-02-22 08:24:41
【问题描述】:
我试图获取包含换行符的一段文本,而用户无需在每次 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) 也没有正确的字符。事实上,当我打印它时,它只打印最后一行。
【问题讨论】:
-
为什么不用
putc(str[i])而不是printf("%c",str[i])? -
你不能一边吃蛋糕一边吃。如果你想要生的,你得到它。问题是如果你不想要原始模式,为什么要使用它。
-
因为我不希望它等到用户在输入每个字符后按回车键才能对其进行处理。在原始模式下,只要我按下任何字符,它就会接受该字符,而不是等到按下回车键。