C – 键入字符时从stdin读取

如何在输入字符时填充80个字符的缓冲区,或者直到按下回车键或缓冲区已满,以先发生者为准。

我已经研究了很多不同的方法,但必须按下输入然后输入字符*在80处被切断。

谢谢。

如果您确实想要“输入”字符,则无法使用C io。 你必须以unix的方式做到这一点。 (或窗口方式)

#include  #include  #include  int main() { char r[81]; int i; struct termios old,new; char c; tcgetattr(0,&old); new = old; new.c_lflag&=~ICANON; tcsetattr(0,TCSANOW,&new); i = 0; while (read(0,&c,1) && c!='\n' && i < 80) r[i++] = c; r[i] = 0; tcsetattr(0,TCSANOW,&old); printf("Entered <%s>\n",r); return 0; } 
 #include ... int count=0; char buffer[81]; int ch=getchar(); while(count<80&&ch!='\n'&&ch!='\r'&&ch!=EOF){ buffer[count]=ch; count=count+1; ch=getchar(); } buffer[count]='\0'; 

buffer作为字符串后,请确保消化输入行的其余部分以使输入流为下次使用做好准备。

这可以通过以下代码完成(取自本文档的scanf部分):

 scanf("%*[^\n]"); /* Skip to the End of the Line */ scanf("%*1[\n]"); /* Skip One Newline */ 
 #include  ... char buf[80]; int i; for (i = 0; i < sizeof(buf) - 1; i++) { int c = getchar(); if ( (c == '\n') || (c == EOF) ) { buf[i] = '\0'; break; } buf[i] = c; } buf[sizeof(buf] - 1] = '\0';