2014-05-12 3 views
2

Я просто использую функцию scanf(). Код ниже:Как отличить целое число и символ при использовании scanf()

scanf("%d",&a); 
printf("%d",a); 

Когда я ввожу 1, он печатает 1, как я хочу. Но даже когда я ввожу 1a, он печатает 1, как раньше. , когда пользователь вводит что-то не целое ((ex) 2,3,12ab, 1 a) Я хочу показать пользователю предупреждение как «целое число ввода».

Как я могу решить эту проблему?

+0

Вы хотите, чтобы люди вводили только одну цифру или целое число (т. Е. 13445 было бы правильным?) –

+1

do 'getchar()' после scanf; если он не является ни «EOF', ни' \ n », они должны были набрать другой символ после номера –

+0

целого числа, например 12345. Кроме того, когда персонаж в стиле 123abc, я хочу поймать его и показать предупреждение. – user3628636

ответ

3

Прочитайте все это в строку с fgets().

Если вы просто хотите, все они входят как единый int, ходить строку и искать isdigit() на каждый полукокс, а затем, когда вы обнаружите, что это все только цифры, называют strtod(), если нет, то испускает ошибку и повторно -незамедлительный.

Если вы хотите, чтобы несколько вещей анализировались из одной и той же строки ввода, вам нужно разобрать строку с чем-то вроде strtok(), чтобы получить отдельные жетоны по одному, затем посмотрите на каждый токен и определите, является ли это числом, глядя чтобы убедиться, что каждый символ isdigit() или равен '-' '.' и тому подобное. Если да, проанализируйте его как число с strtol() или strtod() (и т. Д.) (В зависимости от того, что вы видите, int или float/double.) В противном случае проанализируйте токен в виде строки или испустите ошибку.

Смежные вопросы