C - Reading from stdin as characters are typed

前端 未结 3 1319
醉梦人生
醉梦人生 2021-01-27 01:54

How do I fill an 80-character buffer with characters as they are being entered or until the carriage return key is pressed, or the buffer is full, whichever occurs first.

<
相关标签:
3条回答
  • 2021-01-27 02:30

    If you really want the characters "as they are entered", you cannot use C io. You have to do it the unix way. (or windows way)

    #include <stdio.h>
    #include <unistd.h>
    #include <termios.h>
    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;
    }
    
    0 讨论(0)
  • 2021-01-27 02:33
    #include<stdio.h>
    ...
    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';
    

    Once you have buffer as a string, make sure you digest the rest of the line of input to get the input stream ready for its next use.

    This can be done by the following code (taken from the scanf section of this document):

    scanf("%*[^\n]");   /* Skip to the End of the Line */
    scanf("%*1[\n]");   /* Skip One Newline */
    
    0 讨论(0)
  • 2021-01-27 02:48
    #include <stdio>
    ...
    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';
    
    0 讨论(0)
提交回复
热议问题