Разрешить ввод только цифр - C (СИ)
Формулировка задачи:
столкнулся с тем что нужно сделать защиту от случайного ввода, тоесть нужно чтобы если в место строки, допустим, 2+2*2 введут а+2*2 программа выдавала что в строке присутствует буква, пытался сравнивать if i<-100 && i>100? присутствие буквы показывает всё равно. подскажите что делать.
Решение задачи: «Разрешить ввод только цифр»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int main(){
int anna = 0;
anna = inputs("\n\t\t\tEnter a year: ");
printf("%d", anna);
return 0;
}
int inputs(char *message){
char input[256];
while (1)
{
printf(message);
fgets(input, 256, stdin);//stdin то что вводим с клавиатуры
int last = strlen(input)-1;//укорачиваем строку , чтобы не брать \n
input[last] = '\0';
if ((strlen(input) > 4) || (strlen(input) < 4)){
printf("\n\t\t\tLength must be = 4. Try again");
continue;
}
int i, not_digit = 0;
for (i=0; input[i] != '\0'; i++){
if (!isdigit(input[i]))
{
not_digit = 1;
printf ("\n\t\t\tYou would have to enter the number. Try again: \n");
break;
}
}
if (not_digit)
continue;//повторить
return atoi(input);
}
}
Объяснение кода листинга программы
- Объявлена переменная
annaтипаintсо значением 0. - Вызвана функция
inputsс передачей строки\n\t\t\tEnter a year:в качестве аргумента. - Внутри функции
inputsобъявлена строкаinputтипаcharс размером 256 символов. - В цикле
whileпроисходит вывод сообщения и считывание строки с клавиатуры в переменнуюinput. - Строка укорачивается на последнем символе новой строки
\nдля корректного сравнения длины строки. - Если длина строки больше 4 или меньше 4 символов, выводится сообщение об ошибке и цикл продолжается.
- В цикле
forпроверяется каждый символ строки на цифру с помощью функцииisdigit(). - Если символ не является цифрой, устанавливается флаг
not_digitи выводится сообщение об ошибке. - Если все символы строки являются цифрами, возвращается значение строки в виде числа с помощью функции
atoi(). - В основной функции
mainвыводится значение переменнойanna. - Программа завершается возвратом значения 0.