Защита от дурака в консольном приложении - 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); } }
Объяснение кода листинга программы
- Объявление переменной
anna
типа int и присвоение ей значения 0. - Вывод сообщения с просьбой ввести год.
- Функция
inputs
принимает char* message в качестве параметра и не возвращает ничего. - В функции
inputs
объявление массиваinput
типа char с размером 256. - В функции
inputs
цикл while(1) используется для повторного запроса ввода, если введенные данные некорректны. - В цикле while(1) выводится сообщение с просьбой ввести год.
- Функция fgets считывает строку из стандартного ввода (stdin), сохраняя символ новой строки.
- В функции
inputs
вычисляется длина строки ввода, чтобы не учитывать символ новой строки при проверке длины. - В функции
inputs
в цикле for проверяется каждый символ ввода. - Если символ не является числом, устанавливается флаг not_digit и выводится сообщение с просьбой ввести число.
- Если все символы ввода являются числами, функция atoi преобразует строку в int и возвращается из функции
inputs
. - Если введенные данные некорректны, цикл while(1) повторяется.
- Если введенные данные корректны, функция
inputs
возвращает введенное значение. - Значение
anna
присваивается результату функцииinputs
. - Функция main выводит значение
anna
. - Функция main возвращает 0, что означает успешное завершение программы.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д