Есть программа:
#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 (строку, символы), то программа выводила введите число.
Другие языки программирования и технологии
Как проверить тип данных на си?
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 если программа выполнилась без ошибок или любое другое число если были ошибки. Это число будет возвращено вызывающей программе в качестве кода завершения и позволяет узнать, было ли выполнение программы успешным или она завершилась с ошибкой.
Для преобразования строки в число лучше всего использовать функции 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 если программа выполнилась без ошибок или любое другое число если были ошибки. Это число будет возвращено вызывающей программе в качестве кода завершения и позволяет узнать, было ли выполнение программы успешным или она завершилась с ошибкой.
Для этого ты должен ввести не число, а строку; проверить, что введённая строка содержит корректную запись числа и преобразовать эту строку в число.
scanf возвращает количество параметров, которые удалось преобразовать согласно строке формата
проверяй на равенство 1
PS: но учти, что если ввести
1234длорплдорплоп, то scanf получит 1234 как число, а остальное останется в буфере
проверяй на равенство 1
PS: но учти, что если ввести
1234длорплдорплоп, то scanf получит 1234 как число, а остальное останется в буфере
fgets(*, *, stdin) и sscanf() помогут.
Ну вообще, можно вводить строку, а затем конвертировать в число, если проблемы с конвертацией, то не число.
Почитай про функцию atoi
Почитай про функцию atoi
Проверяй, чтобы каждый символ был цифрой от 0 до 9.
Вообще ввод/вывод с экрана/на экран это сугубо для отладки, не надо извращаться. Подпрограмма ввода/вывода все посмотрит и если введете символ int x; 48<=x<=57, то выведет его на экран, иначе сломается
Похожие вопросы
- Напишите пожалуйста функцию обмена значений двух переменных на си (не c++) для любого типа данных
- Тип данных в паскале
- Что имеется ввиду под 4 байтами у типа данных int?(С++)
- Есть ли в программировании основные (фундаментальные) типы данных, от которых берут начало другие типы?
- Перечислите основные типы данных
- C++. Типы данных. Создание типа данных.
- помогите пожалуйста проверить код на языке си, программа работает неверно - не выдает сумму массива Z
- Что это за тип данных? (Delphi)
- Абстракция и абстрактные типы данных.
- Вопрос про типы данных