Запрет ввода определённых символов в scanf - C (СИ)

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

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

всем привет, я тут впервые так что не пинайте за может глупые на ваш взгляд вопросы. я только начинаю осваивать Си. и есть вопрос, нужно попросить юзера ввести 5 значное целое число не содержащую цифру 0, и проверить если число является полиндромом или нет. если юзер вводит цифру 0 то программа выдаёт соответсвтующее сообщение. код проверика на полиндром я написал и он работает. вопрос как сделать запрет на ввод цифры 0 и как вывести сообщение если такова была набранна? заранее спасибо

Решение задачи: «Запрет ввода определённых символов в scanf»

textual
Листинг программы
#include <stdio.h>
 
void main()
 
{
    //define types of constants
    long int inputnumber, reversenumber = 0, tempnumber = 0,i,check0,count;
    //print message to user with correct input instructions
    printf("Please input positive integer number\nthat contanits up to 5 digits 1-9 [besides 0]: ");
    //input number to constant
 
    scanf("%ld", &inputnumber);
    //put inputnumber value into tempnumber for futher comparasion
    tempnumber = check0 = inputnumber;
    //putinputnumber into 
    //count number of 0 in entered number, set start value to 0
    count = 0;
    //start loop from i=0 to i=entered number, check if entered number modulu 10 = 0, if yes count 1 to count for every 0 in number.
    for (i = 0; i<inputnumber; i++) {
        while (check0>0) {
            if (check0 % 10 == 0) count += 1;
            check0 = check0 / 10;
        }
    }
    //check if countered at least 1 zero in entered number print message that prohibited 0 wase entered
    if (count != 0)
        printf("Your number contain prohibited digit 0\n");
    else
    
    //if number not contains 0, check that is positive and maximum 5 digit number
    if (inputnumber > 0 && inputnumber < 100000)
    {
        //if entered correct number, reverse entered number i.ex 123->321 
        while ((inputnumber > 0) && (inputnumber < 100000))
        {
            reversenumber = reversenumber * 10 + inputnumber % 10;
            inputnumber = (inputnumber - (inputnumber % 10)) / 10;
        }
        //now check if entered number(tempnumber=inputnumber) = to reversed number, if yes print message that number is polindrome
        if (tempnumber == reversenumber)
            printf("Your number is Polindrome\n");
        else
        //if not, print Not polindrome
            printf("Your number is not Polindrome\n");
    }
    //if entered incorrect non positive  and not 5 digit number, print this message
    else printf("Incorrect input\n You entered more than 5 digits or prohibited symbol\n");
 
}

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

  1. В начале кода определяются типы переменных: long int inputnumber, reversenumber = 0, tempnumber = 0, i, check0, count.
  2. Выводится сообщение с инструкцией для ввода: Please input positive integer number that contanits up to 5 digits 1-9 [besides 0]:
  3. С помощью функции scanf() пользовательский ввод сохраняется в переменную inputnumber.
  4. Значение inputnumber копируется в переменную tempnumber для дальнейшего сравнения.
  5. Переменная count инициализируется значением 0 и используется для подсчета количества нулей во введенном числе.
  6. Начинается цикл от i=0 до i=inputnumber. Для каждого значения i выполняется проверка, является ли остаток от деления check0 на 10 равным 0. Если это так, значение count увеличивается на 1.
  7. check0 делится на 10, чтобы убрать последнюю цифру из числа.
  8. Если введенное число содержит хотя бы одну цифру 0, выводится сообщение Your number contain prohibited digit 0.
  9. Если введенное число не содержит цифр 0 и является положительным числом, проверяется, что оно не превышает 5 цифр. Если это так, выводится сообщение Incorrect input. You entered more than 5 digits or prohibited symbol.
  10. Если введенное число не содержит цифр 0, является положительным числом и имеет не более 5 цифр, начинается процесс переворота числа.
  11. В обратном порядке числа, начиная с последней цифры, создается переменная reversenumber.
  12. Переменная tempnumber обновляется значением inputnumber.
  13. Если tempnumber равно reversenumber, выводится сообщение Your number is Polindrome. В противном случае выводится сообщение Your number is not Polindrome.
  14. Код завершается.

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


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

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

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