有人能说出这个c程序有什么问题吗?

时间:2017-02-21 10:55:45

标签: c

它打印所有强数字(数字等于数字的阶乘之和。)直到m。

我在代码块中运行了它。

它正在接受输入,但在此之后,它表示filename.exe已停止运行。可能是什么原因?编译器可能有问题吗?

所有其他代码运行良好。

#include<stdio.h>

int fact(int);
int main()
{
    int j,n,m,sum=0;
    scanf ("%d",m);
    for (j=1; j<=m; j++)
    {
        n=j;
        while (n>0)
        {
            sum= sum + fact(n%10);
            n=n/10;
        }
        if (j==sum)
            printf("%d  ",j);
    }
    return 0;

}


int fact (int n)
{
    if (n==0)
        return 1;
    else
        return fact(n-1)*n;`
}

2 个答案:

答案 0 :(得分:2)

如果你启用了编译器警告,你会得到类似的东西:

main.c:7:17: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
    scanf ("%d",m);
            ~~  ^

这使得问题非常明确。 scanf需要一个指向int的指针才能读入它:scanf("%d", &m);

答案 1 :(得分:1)

scanf想要使用%d格式说明符来确定目标变量的地址。

scanf ("%d",m);

必须是

scanf ("%d", &m);

附注:照顾int范围–2,147,483,6482,147,483,647