Другие языки программирования и технологии

Как проверить тип данных на си?

Есть программа:
#include
#include
#include

void main(void) {
setlocale(LC_ALL, "Rus");
int a, b, pr;
printf("Введите ваше первое значение: ");
scanf("%d", &a);
printf("Введите ваше второе значение: ");
scanf("%d", &b);
pr = a * b;
printf("%d * %d = %d\n", a, b, pr);
getch();
}

Нужно чтобы если ввели тип данных не int (строку, символы), то программа выводила введите число.
Kirill Evgenevich
Kirill Evgenevich
23
1. Семейство scanf лучше вообще никогда не использовать, так как обработка ошибок при таком подходе будет весьма нетривиальной задачей. Вообще забудьте, что такие функции есть.
Для преобразования строки в число лучше всего использовать функции strtol, strtoul и другие из этого семества так как они однозначно позволяют отследить ошибку. Для их использования подключите stdlib.h
2. Ваш вызов функции setlocale(LC_ALL, "Rus"); - вы уверены, что используете корректное наименование локали? Попробуйте вызвать setlocale(LC_ALL, ""); - когда указана пустая строка, функция будет брать текущую локаль из окружения. По крайней мере она так делает в приличных операционных системах.
3. В подобных программах наиболее разумным способом ввода информации является использование аргументов командной строки. Для этого функция main должна записываться как
int main( int argc, char* argv[] )
argc - количество аргументов командной строки, включая имя программы
argv[] - массив указателей на строки с аргументами. argv[0] - имя программы, argv[1] - первый аргумент командной строки, argv[2] - второй аргумент командной строки и т. д.
возвращаемое значение - 0 если программа выполнилась без ошибок или любое другое число если были ошибки. Это число будет возвращено вызывающей программе в качестве кода завершения и позволяет узнать, было ли выполнение программы успешным или она завершилась с ошибкой.
Каин Адамов И Евин
Каин Адамов И Евин
9 624
Лучший ответ
Для этого ты должен ввести не число, а строку; проверить, что введённая строка содержит корректную запись числа и преобразовать эту строку в число.
Алексей Хамов
Алексей Хамов
71 726
scanf возвращает количество параметров, которые удалось преобразовать согласно строке формата

проверяй на равенство 1

PS: но учти, что если ввести

1234длорплдорплоп, то scanf получит 1234 как число, а остальное останется в буфере
EK
Erik Kasumkulov
57 627
fgets(*, *, stdin) и sscanf() помогут.
Сергей Петин
Сергей Петин
60 132
Ну вообще, можно вводить строку, а затем конвертировать в число, если проблемы с конвертацией, то не число.
Почитай про функцию atoi
Вова Солнцев
Вова Солнцев
28 648
Проверяй, чтобы каждый символ был цифрой от 0 до 9.
Вообще ввод/вывод с экрана/на экран это сугубо для отладки, не надо извращаться. Подпрограмма ввода/вывода все посмотрит и если введете символ int x; 48<=x<=57, то выведет его на экран, иначе сломается