Почему перемещение printf () в цикле while, использующем getchar (), дает разные результаты? - PullRequest
0 голосов
/ 02 февраля 2019

Я новичок в C, извините, если этот вопрос является основным.Я пытаюсь понять поведение функции getchar().

Здесь у меня есть две версии моего кода:

Первая:

#include <stdio.h>

int main()
{
    int c = getchar();
    while (c != EOF)
    {
        putchar(c);
        c = getchar();
        printf(" hello\n");
    }
}

, когдаЯ ввожу 12 и нажимаю клавишу возврата, которую производит эта:

12
1 hello
2 hello

, а затем есть другая, куда я перемещаю printf () вверх, вводу того же ввода

#include <stdio.h>

int main()
{
    int c = getchar();
    while (c != EOF)
    {
        putchar(c);
        printf(" hello\n");
        c = getchar();
    }
}

ивыдаёт:

12
1 hello
2 hello

 hello

Почему эти два не работают одинаково и почему этот дополнительный привет появляется в конце второго кода.

1 Ответ

0 голосов
/ 02 февраля 2019

Обратите внимание, что вы ввели 3 символа - '1', '2' и символ новой строки (\n).Учитывая это, давайте проследим, что делают ваши программы:

Первый фрагмент:

Read '1' -> 
Print '1' -> 
Read '2' -> 
Print "hello\n" -> 
Print '2' -> 
Read '\n' -> 
Print "hello\n" -> 
Print '\n' -> 
wait for more input

Итак, последнее, что напечатано, - это новая строка.

Второй фрагмент:

Read '1' -> 
Print '1' ->  
Print "hello\n" -> 
Read '2' -> 
Print '2' -> 
Print "hello\n" -> 
Read '\n' -> 
Print '\n' -> 
Print "hello\n" -> 
wait for more input.

Итак, сначала печатается символ новой строки, а затем "hello".

Короче говоря, оба фрагмента выполняют одинаковое количество итераций, но в первом последний printf(" hello\n") блокируется getchar когда больше нет ввода.Что не так во втором фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...