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