Как читать символы из stdin в массив в c? - PullRequest
1 голос
/ 20 сентября 2019

В последний раз я делал C в 1991 году, а сейчас помогаю другу с домашней работой.

Он должен получить символы из stdin в массив.Кажется достаточно простым.Я подумал, что буду использовать этот вопрос в качестве контрольной точки .

У нас есть это:

    printf("Input the line\n");
    i=read(0, arg, sizeof(char)*9);

IIUC, который получает нам символы и основывается на ответном комментариимы должны иметь возможность помещать символы непосредственно в массив arg следующим образом:

   while ((c = getchar()) != '\n' && c != EOF  && i2<9 ) {
     arg[i2] = c;
     i2++;
   }

Однако это печатает (repl.it link) :

 ./main
Input the line
123 456 789

893 456

Таким образом, похоже, что хотя я пытаюсь ограничить его индексами [0,8], добавив i2<9 в цикл while, он по-прежнему захватывает 89 и помещает его в начало массива, поскольку только массивподходит для 9 символов.

Почему это?И я иду по этому пути правильно?

Нам не разрешено использовать fpurge.Я полагаю, профессор пытается научить их, как это делать вручную ...

1 Ответ

3 голосов
/ 20 сентября 2019

Я не понимаю, что вы пытаетесь сделать здесь,

   while ((c = getchar()) != '\n' && c != EOF  && i2<9 ) {
     arg[i2] = c;
     i2++;
   }

Вышеуказанный цикл в основном используется для использования оставшегося ввода в потоке ввода после read.


То есть с

i=read(0, arg, sizeof(char)*9);

Вы читаете 9 символов в arg, но вы ввели 11 символов вместе с \n.

Таким образом arg будет иметь содержимое,

  123 456 (null)   <---contents
  01234567 8       <---indexes

помните, что 89\n осталось в потоке.таким образом, с циклом while вы читаете 89 в массив arg из индекса 0.

...