2017-02-21 83 views
-3

它打印所有強號(數字等於數位的階乘總和),直到m。有人可以告訴這個C程序有什麼問題嗎?

我在代碼塊中運行它。

它正在輸入,但在此之後,它說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;` 
} 
+8

''scanf(「%d」,m);' - >'scanf(「%d」,&m);' –

+1

'傾斜如何使用調試器。真的。值得花費時間。 –

回答

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);

+0

非常感謝快速響應。我的編譯器沒有顯示任何錯誤。 – Andy

+0

然後再打開它們。(warnings!= errors) – emlai

+0

打開。再次感謝。 – Andy

1

scanf想要使用%d格式說明符的目標變量的地址。

scanf ("%d",m); 

必須

scanf ("%d", &m); 

旁註:採取的int範圍護理:–2,147,483,6482,147,483,647

相關問題