Как отличить char от int?

Я хочу знать, если есть команда, которая находит, какой тип находится в переменной, если это char или int. Например, чтобы сделать программу, которая, если вводится что-то, кроме числа, показывает пользователю ошибку, потому что я использую переменную int в scanf, но если пользователь вводит char, программа продолжается, я хочу сделать это остановить, когда печатается тип char


person Morpheus Curriculum Vitæ    schedule 07.06.2017    source источник
comment
Вы гуглили свой вопрос?   -  person Kick Buttowski    schedule 07.06.2017
comment
Возможный дубликат stackoverflow.com/questions/1478932/   -  person B. Wolf    schedule 07.06.2017
comment
@KickButtowski да, я искал, но не нашел так, как хотел   -  person Morpheus Curriculum Vitæ    schedule 07.06.2017
comment
Если вы используете одну из функций семейства scanf(), вы просто проверяете значение, которое возвращает функция: это количество успешных преобразований. Итак, если вы попытаетесь прочитать int x; из стандартного ввода, вы можете использовать, например. if (scanf("%d", &x) == 1) { /* Thank you for the value of x */ } else { /* Bad user! Not an integer! */ }   -  person Nominal Animal    schedule 07.06.2017
comment
@NominalAnimal спасибо, чувак, сработало   -  person Morpheus Curriculum Vitæ    schedule 07.06.2017
comment
@KickButtowski Google не является авторитетом в области программирования; к сожалению, особенно в области программирования на C, Google возвращает результаты, которые недействительны и не переносимы. Пожалуйста, не делайте эту рекомендацию снова.   -  person autistic    schedule 07.06.2017
comment
@user8120919 Всю эту информацию и многое другое можно найти в fscanf руководстве. В будущем имейте в виду, что программисты C должны читать руководства, чтобы избежать неопределенного поведения. У Open Group есть несколько хороших руководств; они обычно достаточно синхронизированы со стандартными руководствами C благодаря принятию C в качестве системного языка для UNIX-систем, совместимых с Opengroup/POSIX.   -  person autistic    schedule 07.06.2017
comment
@Seb хорошо, я посмотрю эти руководства, спасибо   -  person Morpheus Curriculum Vitæ    schedule 08.06.2017


Ответы (1)


Попробуйте использовать isdigit(int c). Возвращает ненулевое значение, если c является цифрой, иначе возвращает 0. Для получения дополнительной информации введите 'man isdigit'

person ddannel    schedule 07.06.2017
comment
Я искал эту функцию раньше, но когда я тестировал, у меня были ошибки, теперь я искал больше, и, насколько я понял, для этой функции нужно использовать char, а не int, который я использовал - person Morpheus Curriculum Vitæ; 08.06.2017
comment
Нет, @MorpheusCurriculumVitæ, вы должны использовать int, в котором хранится значение unsigned char или EOF. Что я писал про мануалы ранее? Вы можете найти isdigit руководство по стандартам OpenGroup здесь. Он говорит, и я цитирую: Аргумент c представляет собой int, значение которого приложение должно гарантировать, что это символ, представляемый как unsigned char или равно значению макроса EOF. Если аргумент имеет любое другое значение, поведение не определено. Акцент не мой. - person autistic; 09.06.2017
comment
@ddannel См. Комментарий выше для моего протеста против вашего предложения Он возвращает ненулевое значение, если c в цифре, иначе il возвращает 0. - person autistic; 09.06.2017