1

Вопрос по buffer, stdin, input, c – undefined

Как мне заполнить 80-символьный буфер символами, когда они вводятся, или пока не будет нажата клавиша возврата каретки, или буфер заполнен, в зависимости от того, что произойдет раньше.

Я рассмотрел много разных способов, но нужно нажать Enter, чтобы ввод char * обрезался на 80 ...

Благодарю.

  • getchar()Error: User Rate Limit ExceededintError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceedednotError: User Rate Limit ExceededplusError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от user884685
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • charError: User Rate Limit ExceededintError: User Rate Limit Exceeded

    от
  • Паксдиабло имеет правильную идею. Решение, на которое он ссылается, использует fgets (), который, кажется, делает то, что вы хотите.

    от Sean
  • Как я могу найти заголовочные файлы для ioctl

    от user884685
  • Увидетьstackoverflow.com/questions/4023895/… для надежного решения для пользовательского ввода.

    от paxdiablo
  • смотреть в проклятия, или ioctl

    от Dave
  • сделаю спасибо.

    от user884685
  • 0

    Code:

    #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';
    

  • 3

    Если вы действительно хотите

    чтобы символы были «введены», вы не можете использовать C io. Вы должны сделать это Unix способом. (или способ Windows)

    #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

    Когда у вас есть

    #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';
    

    buffer как строка, убедитесь, что вы переварили оставшуюся часть строки ввода, чтобы подготовить поток ввода для его следующего использования.

    Это можно сделать с помощью следующего кода (взятого изscanf разделэтот документ):

    scanf("%*[^\n]");   /* Skip to the End of the Line */
    scanf("%*1[\n]");   /* Skip One Newline */