@evg_96

Как разобраться с функцией считывания строки?

В книге представлена указанная ниже функция считывания строки со стандартного потока ввода.
Не могу понять ее логику.
Получается 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;
}
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы