C 当输入为10且阶乘值仅返回33个数字时,程序失败
当输入10作为输入时,程序(用于计算阶乘)失败,而对于所有其他输入(在系统限制内),程序工作正常,除非输入任何字符,否则程序进入无限循环,输出为“阶乘1是1” 如果我输入34或任何大于34的数字,那么我得到的输出是“输入数字的阶乘为0”。对于大于33的数字,为什么阶乘值为0 节目如下:C 当输入为10且阶乘值仅返回33个数字时,程序失败,c,factorial,C,Factorial,当输入10作为输入时,程序(用于计算阶乘)失败,而对于所有其他输入(在系统限制内),程序工作正常,除非输入任何字符,否则程序进入无限循环,输出为“阶乘1是1” 如果我输入34或任何大于34的数字,那么我得到的输出是“输入数字的阶乘为0”。对于大于33的数字,为什么阶乘值为0 节目如下: #include <stdio.h> #include <stdlib.h> int display(); void fact_fun(int num_fact); int
#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);
}
}
#包括
#包括
int display();
无效事实(整数事实);
int main()
{
int num=0;
下一步;
下一步=显示();
而(下一步!='\n')
{
num=下一个;
事实乐趣(num);
下一步=显示();
}
返回0;
}
int显示()
{
int输入;
printf(“\n输入数字以查找阶乘,或按ENTER键以退出:”;
scanf(“%d”,输入(&I));
返回输入;
}
无效事实乐趣(整数事实)
{
int-fact=1;
如果((num_-fact>='a'&&num_-fact='a'&&num_-fact在显示函数中使用char
而不是int
在scanf
中使用%d
格式说明符,请将其更改为int
。您在编译时一定看到了警告:
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’
除此之外,当输入的数字为10时,您的程序无法交付,要解决此问题:
while(next>=0) //WHEN NEGATIVE NUMBER IS ENTERED IT WILL END THE LOOP
{
num = next;
fact_fun(num);
next=display();
}
简化事实\u乐趣:
void fact_fun(int num_fact)
{
int fact =1;
if(num_fact == 0)
{
printf("Factorial of %d is 1",num_fact);
return;
}
else
{
for(int i = 1; i<= num_fact; i++)
{
fact = fact*i;
}
printf("Factorial of %d is %d",num_fact,fact);
}
}
34!
是295232799039660414084761618609643520000000
。在您的机器上,int
可以存储的最大值是多少?它是小于还是大于29523279903966041408476186964352000000
?@MarkDickinson我的系统是64位的,因此它可以保存至少0到18446744073范围内的整数值,709,551,615@user3121023那么,如果在一个变量中接受整数和字符,该怎么办?@vasudhadix,64位系统只允许这么多的存储空间。但是Int32
保持32位。尝试查看long
@Kari:long
也只能保证表示+/-(2**31-1)(无论Int32
是什么,它都不是标准类型)。这不取决于平台,而是取决于实现。谢谢。现在程序在输入10时没有失败。但我不明白为什么它在(下一步!='\n')
?@vasudhadix更新我的答案时不使用。因为输入存储在一个变量中(它是int类型)如果我输入字符,那么它将进入无限循环,那么可以做些什么来解决它?@VasudhaDixit updated但当输入字母或符号字符时,程序将进入无限循环
int display()
{
char inp[10]={0};
int input;
int index=0;
printf("Enter number to find factorial or press ENTER to exit : ");
while(((input=getchar())!=EOF)&(index<10))
{
if((input>='0')&&(input<='9'))
{
inp[index++]=input;
}
else if(input=='\n')
break;
else
return -1;
}
input=atoi(inp);
return input;
}