Я хочу ввести данные по формату "% d:% c"
У меня есть это:
#include <stdio.h>
int main() {
int number;
char letter;
int i;
for(i = 0; i < 3; i ++) {
scanf("%c:%d", &letter, &number);
printf("%c:%d\n", letter, number);
}
}
Я ожидаю этого:
Input: "a:1"
Output: "a:1"
Input: "b:2"
Output: "b:2"
Input: "c:3"
Output: "c:3"
Но моя программа делает что-то вроде этого:
a:1
a:1
b:2
:1
b:2
--------------------------------
Process exited with return value 0
Press any key to continue . . .
В чем проблема?
Потому что, когда вы читаете ввод с помощью scanf
, символ Enter все еще остается в буфере, поэтому ваш следующий вызов scanf
будет scanf
его символом.
Это легко разрешимо, если scanf
чтобы пропустить пробелы, добавив одно пробел в код формата, например
scanf(" %c:%d", &letter, &number);
/* ^ */
/* | */
/* Notice leading space */
OP говорит "... входные данные по формату"% d:% c ", но код использует "%c:%d"
а для ввода данных подразумевается" char ", а затем" number ".
Предлагать:
1) Определите желаемый порядок.
2) Используйте пробел перед "%c"
как в " %c"
чтобы использовать начальные пробелы, как предыдущая строка Enter (или '\n'
).
эта ссылка может быть полезна. использование% c после% d в функции scanf() приводит вас к такой сложности.
Короче говоря, ввод "\n" после ввода номера ввода первого тестового примера будет принят в качестве символьного ввода второго тестового примера.
чтобы вы не могли редактировать свои команды scanf
как scanf(" %c:%d",...);
, Ведущее пространство перед% c позволяет избежать ввода всех этих "\n" входов в качестве символов.
\n
в свой файлscanf
?" %c:%d"