Разрешить ввод только цифр - 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);
        }
}

Объяснение кода листинга программы

  1. Объявлена переменная anna типа int со значением 0.
  2. Вызвана функция inputs с передачей строки \n\t\t\tEnter a year: в качестве аргумента.
  3. Внутри функции inputs объявлена строка input типа char с размером 256 символов.
  4. В цикле while происходит вывод сообщения и считывание строки с клавиатуры в переменную input.
  5. Строка укорачивается на последнем символе новой строки \n для корректного сравнения длины строки.
  6. Если длина строки больше 4 или меньше 4 символов, выводится сообщение об ошибке и цикл продолжается.
  7. В цикле for проверяется каждый символ строки на цифру с помощью функции isdigit().
  8. Если символ не является цифрой, устанавливается флаг not_digit и выводится сообщение об ошибке.
  9. Если все символы строки являются цифрами, возвращается значение строки в виде числа с помощью функции atoi().
  10. В основной функции main выводится значение переменной anna.
  11. Программа завершается возвратом значения 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы