Программа C возвращает факториальное значение до 33 числа и вывод идет в бесконечном цикле после ввода символа в качестве входного
Я пишу одну факториальную программу C, в которой пользователю не разрешается вводить отрицательный и алфавитный символ, но допускается число от 0. Программа будет запрашивать ввод до тех пор, пока не будет нажата клавиша enter.
Программа отлично работает, когда я ввожу любое число или нажимаю клавишу enter, но когда я ввожу любой символ, он переходит в бесконечный цикл, выдавая вывод в виде "факториал 1 равен 1"... Почему это происходит?
Кроме того, когда я ввожу ASCII-значение символа алфавита(например, 109), я получаю вывод в виде "алфавит не допускается- но ожидание-это факторное значение этого числа. Я знаю, что это происходит потому, что я использую одну и ту же переменную для проверки алфавита и числа. Тогда как мне проверить наличие алфавита и числа отдельно? поскольку входное значение хранится в одной переменной.
На выходе я получаю факториал только до 33 числа. Если я ввожу 34 или любое число больше 34, то я получаю вывод как "факториал [введенного числа] равен 0". Почему значение факториала равно 0 для числа больше 33?
Будьте добры, направьте меня туда, где я совершаю ошибку.
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> int display(); void fact_fun(int num_fact); int main() { int num = 0; char next; next=display(); while( next != '\n') { num = next; fact_fun(num); next=display(); } return 0; } int display() { int input; printf("\nEnter number to find factorial or press ENTER to exit :"); scanf("%d",&input); return input; } void fact_fun(int num_fact) { int fact=1; if((num_fact>='a' && num_fact<='z') || (num_fact>='A' && num_fact<='Z')) { printf("Alphabet is not allowed"); } else if(num_fact < 0) { printf("Negative number is not allowed"); } else if(num_fact == 0) { printf("Factorial of %d is 1",num_fact); } else { for(int i = 1; i<= num_fact; i++) { fact = fact*i; } printf("Factorial of %d is %d",num_fact,fact); } }