Защита от дурака в консольном приложении - 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, что означает успешное завершение программы.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д