fgets
читает символы из потока и записывает их в буфер до тех пор, пока либо буфер почти не заполнится, либо не найдет '\n'
(при неудачной операции возвращается NULL).
Таким образом, вы можетезнать, сколько символов characeters было прочитано (включая '\n'
) с помощью strlen
...
ret = fgets(buffer, sizeof buffer, stdin);
if (ret == NULL) /* deal with error */;
chars = strlen(buffer);
Теперь может произойти одно из двух: либо '\n'
было прочитано до того, как буфер был получензаполнен или буфер заполнен до чтения '\n'
.Вы можете узнать, что это было, изучив последний символ в буфере
if (buffer[chars - 1] == '\n') /* full line read */;
else /* incomplete line */;
Обратите внимание, что chars
всегда (*) 1 или больше, поэтому выражение buffer[chars - 1]
в порядке.
(*) это может быть 0 только с двоичными данными для ввода, но это запрещает использование strlen
и других строковых функций.