#c #loops #character
#c #циклы #символ
Вопрос:
Это всего лишь простая программа, которая пытается получить символы, пока не будет введено ‘0’. Но, когда я выполняю это в Code::Blocks 17.12, терминал, кажется, всегда получает два символа в качестве входных данных перед печатью введенного символа.
char temp;
do {
printf("Enter character: ");
scanf("%c ",amp;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:
Проблема в том, что вы просите scanf
пропустить завершающий пробел в вашей строке формата. Чтобы scanf
знать, когда и где заканчивается конечный пробел, должен быть какой-то ввод, который не является пробелом.
Решение состоит в том, чтобы пропустить начальный пробел в строке формата " %c"
.
Комментарии:
1. У меня есть еще одно сомнение, я пробовал scanf («% c n»,amp;temp); Почему это не сработало?
2. @suryathiags Для
scanf
любой символ пробела в строке формата равен, не имеет значения, является ли это табуляцией ('t'
), пробелом (' '
) или новой строкой ('n'
). Таким образом, завершающий символ новой строки ничем не отличается от того, что у вас уже было.3. Последний вопрос. Я попробовал исходный код в Gfg ide, и это сработало. Входные данные были
a b c d e 0
. Насколько я могу судить, это сработало, потому что это был тот же случай, но затем, поскольку после последнего 0 ничего нет, он, должно быть, принял 0 в качестве входных данных. Прав ли я в какой-то степени?4. @suryathiags Для автоматизированных систем входные данные обычно передаются по каналу в программу. И когда ввод закончится, чтение из канала приведет к завершению файла (
EOF
). Вероятно, это то, что там произошло.