Проверка на корректность данных - C (СИ)
Формулировка задачи:
Нужно чтобы данные переменная была типа %d и больше 1, как это проверить? Предположил, что так:
while(ni==0)
{
printf("Введите количество элементов: ");
scanf_s("%d",&ni);
if(!ni || ni<1)
{
printf("Введите верные данные\n");
ni=0;
}
}Решение задачи: «Проверка на корректность данных»
textual
Листинг программы
int IsValidEnter(char *str)
{
int i;
if (str[0] < '1' && str[0] > '9')
return 0;
for (i = 1; i < strlen(str); i++)
if (str[0] < '0' && str[0] > '9')
return 0;
return 1;
}
int StrToInt (char *str)
{
int i;
int res = 0;
for (i = 0; i < strlen(str); i++)
{
res *= 10;
res += (str[i]-'0');
}
return res;
}
int main()
{
char s[255];
int ni;
...
while(1)
{
printf("Введите количество элементов: ");
gets(str);
if(!IsValidEnter(s))
{
printf("Введите числовые данные.\n");
continue;
}
ni = StrToInt(s);
if (ni < 1)
{
printf("Количество должно быть больше единицы.\n");
continue;
}
break;
}
}
Объяснение кода листинга программы
- Функция
IsValidEnterпроверяет, является ли введенное значение числовым. - Если первый символ не является числом, функция возвращает 0.
- Если любой последующий символ не является числом, функция возвращает 0.
- Если все символы являются числами, функция возвращает 1.
- Функция
StrToIntпреобразует строку в целое число. - Для преобразования каждого символа в число, он вычитается из символа '0'.
- Результат умножается на 10 и добавляется к общему результату.
- В функции
mainвводится количество элементов. - Если введенное значение не является числом, выводится сообщение об ошибке и цикл продолжается.
- Если введенное значение меньше 1, выводится сообщение об ошибке и цикл продолжается.
- Если введенное значение является числом, программа продолжает работу.