Защита от дурака в консольном приложении - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, начинал изучать си. Сейчас пишу консольное приложение, вот, нужно сделать так чтобы пользователь мог вводить только некоторые цифры, в случае ввода не цифр выдавать ошибку. Как это сделать? Я смог сделать что-то похожее только для ввода букв. А как сделать чтобы можно было только определенные символы вводить? Вот участок кода:
while (!scanf("%d", &checkbox))
       { 
           while (getchar() != '\n'); 
           printf("Oshibka! Povtorite vvod: "); 
       } 
       switch (checkbox)

Решение задачи: «Защита от дурака в консольном приложении»

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. Вывод сообщения с просьбой ввести год.
  3. Функция inputs принимает char* message в качестве параметра и не возвращает ничего.
  4. В функции inputs объявление массива input типа char с размером 256.
  5. В функции inputs цикл while(1) используется для повторного запроса ввода, если введенные данные некорректны.
  6. В цикле while(1) выводится сообщение с просьбой ввести год.
  7. Функция fgets считывает строку из стандартного ввода (stdin), сохраняя символ новой строки.
  8. В функции inputs вычисляется длина строки ввода, чтобы не учитывать символ новой строки при проверке длины.
  9. В функции inputs в цикле for проверяется каждый символ ввода.
  10. Если символ не является числом, устанавливается флаг not_digit и выводится сообщение с просьбой ввести число.
  11. Если все символы ввода являются числами, функция atoi преобразует строку в int и возвращается из функции inputs.
  12. Если введенные данные некорректны, цикл while(1) повторяется.
  13. Если введенные данные корректны, функция inputs возвращает введенное значение.
  14. Значение anna присваивается результату функции inputs.
  15. Функция main выводит значение anna.
  16. Функция main возвращает 0, что означает успешное завершение программы.
  17. Программа завершается.

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


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

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

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