В книге представлена указанная ниже функция считывания строки со стандартного потока ввода.
Не могу понять ее логику.
Получается
fgets(str, size, stdin);
означает считать в буффер строку размером
size
включая символ новой строки
\n
.
Потом в цикле получается пробегаемся по всей строке в поиске индекса символа
\n
либо
\0
.
Вот тут непонятно откуда может получиться нулевой символ, если в любом случае при вводе с терминала в конце будет символ новой строки.
Далее идет проверка если найденный символ это символ новой строки, то заменяем его на нулевой символ, оставляя этим строку без символа новой строки.
Но опять же не понятна логика else
. Опять же откуда может появиться нулевой символ раньше чем символ новой строки, да и в принципе не могу понять откуда он может появиться.
И не понятно для чего следующий цикл пропуска символов после
\0
до
\n
.
while (getchar() != '\n')
continue;
Поясните пожалуйста, суть и логику данной функции. Вроде как понятно что считывает строку, но некоторые моменты непонятны.
char * s_gets(char * str, size_t size)
{
char * return_value;
int i = 0;
return_value = fgets(str, size, stdin);
if (return_value)
{
while (str[i] != '\n' && str[i] != '\0')
i++;
if (str[i] == '\n')
str[i] = '\0';
else
while (getchar() != '\n')
continue;
}
return return_value;
}