Выполнение пропускает getchar () в цикле после возврата каретки и putchar ()?

Это'Я впервые публикую здесь, так что, надеюсь, все пойдет по плану.

я делаю одно из ранних упражнений от K &R. Цель состоит в том, чтобы использовать getchar (), чтобы получить кучу символов от пользователя, а затем распечатать их, используя putchar (), но пропуская лишние пробелы. Мое решение для упражнения прекрасно работает, но я нене понимаю почему.

Вот'С программой:

#include 

int main()
{
    int c, spc;
    c = 0;
    spc = 0;

    while(c != EOF)
    {
        c = getchar();

        if(c == ' ')
        {
            if(spc != 1)
            {
                putchar(c);
                spc = 1;
            }
        }
        if(c != ' ')
        {
            spc = 0;
            putchar(c);
        }
    }
    return 0;
}

Существует только один цикл, и выполнение останавливается во время первой итерации, когда он достигает getchar (), как и ожидалось. После нажатия кнопки возврата каретки программа продолжает печатать все, что пользователь ввел в буфер, без лишних пробелов - именно то, что нужно.должен делать.

Но что я нене понимаю, почему исполнение неt останавливаться на каждой последующей итерации цикла, когда он сталкивается с getchar (). Имеет ли отношение персонаж / n к этому? Я заметил, что он также печатает новую строку, и после того, как каждая вещь напечатана, он снова останавливается на getchar (). Итак, почему он пропускает getchar () в начале каждой итерации при печати всего в буфере?

долгое время играл с C, но только недавно приложил усилия, чтобы выучить егоправо' путь. Так как у меня есть некоторый опыт, ты нене нужно тупить ваши ответы внизтоже много (так, как тыобъясни это 10-летнему, а не 5-летнему).

Ответы на вопрос(2)

Ваш ответ на вопрос