Как се диференцира 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 като системен език за Opengroup/POSIX-съвместими UNIX системи.   -  person autistic    schedule 07.06.2017
comment
@Seb добре, ще видя тези ръководства, благодаря   -  person Morpheus Curriculum Vitæ    schedule 08.06.2017


Отговори (1)


Опитайте да използвате isdigit(int c). Връща ненулева стойност, ако c е цифра, в противен случай il възстановява 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 е в цифра, в противен случай връща 0. - person autistic; 09.06.2017