Невозможно последовательно получить символы в цикле - PullRequest
2 голосов
/ 31 марта 2019

Это простая программа, которая пытается получить символы, пока не будет введено «0». Но когда я выполняю это в Code :: Blocks 17.12, терминал всегда, кажется, получает два символа в качестве ввода перед печатью введенного символа.

char temp;
do  {
     printf("Enter character: ");
     scanf("%c ",&temp);
     printf("Character entered: [%c]\n",temp);
}while(temp!='0');

Результат, который я получил, был

Enter character: a
b
Character entered: [a]
Enter character: c
Character entered: [b]
Enter character: d
Character entered: [c]
Enter character: e
Character entered: [d]
Enter character: 0
Character entered: [e]
Enter character: 0
Character entered: [0]

Мой ожидаемый результат был

Enter character: a
Character entered: [a]
Enter character: b
Character entered: [b]
Enter character: c
Character entered: [c]
Enter character: c
Character entered: [c]
Enter character: 0
Character entered: [0]

1 Ответ

3 голосов
/ 31 марта 2019

Проблема в том, что вы просите scanf пропустить конечный пробел в строке формата. Чтобы scanf знал, когда и где заканчивается завершающий пробел, должен быть какой-то ввод, не являющийся пробелом.

Решение состоит в том, чтобы пропустить ведущий пробел со строкой формата " %c".

...