2014-01-25 127 views
3

當我試圖執行下面的代碼,它顯示爲一個分割錯誤後,我輸入2個數字..我沒有發現任何錯誤..這是一個程序讀取n數字從用戶和添加所有數字的所有數字並打印出來。以下代碼有什麼錯誤?我得到了一個分段錯誤

/*Read n numbers and find sum of digits*/ 

#include<stdio.h> 
int main() 
{ 
    int n, num[50], sum=0, dig, i; 
    printf("\nHow many number you want to enter: "); 
    scanf("%d", &n); 
    printf("\nEnter numbers: "); 
    for(i=0; i<n; i++) 
    { 
     scanf("%d", num[i]); //Enter each number inputted from keyboard 
     printf("\nThe number entered now %d", num[i]); 
    } 
    for(i=0; i<n; i++) 
    { 
     while(num[i] != 0) 
     { 
      dig = num[i]%10; //finding out the digits of each number 
      sum = sum + dig; 
      num[i] = num[i]/10; 
      printf("\nSm of digits till now: ", sum); 
     } 
    } 
    printf("\nSum of digits of all numbers entered: %d", sum); 
    return 0; 
} 

回答

5

你忘了在scanf &操作:

scanf("%d", num[i]); 

應該是:

scanf("%d", &num[i]); 
//   ^^ 

順便說一句,學習Indenting C Programs正確。

我沒有發現任何錯誤

是你的程序編譯,但你不應該忽略警告。例如在你的代碼中用gcc警告如下描述了這個問題。

警告:格式‘%d’預計‘int *’類型的參數,但參數2具有鍵入‘int’
[-Wformat]

它說第二參數在scanf函數調用是num[i]爲int型的(因爲詮釋數組num),而根據第一個參數%d它應該是int*,意味着你需要傳遞地址,這意味着你忘了&運營商的地址&個符號。

+1

這是正確的。然而,他的身份如果沒有問題,那確實是一個風格問題 - 在這個問題上不需要宗教戰爭! –

+0

非常感謝Grijesh Chauhan!現在是問題解決了。並感謝縮進建議。將盡力練習它們。 – LearneR

+0

@KrishnaKanth您的歡迎。你想[接受這個答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

相關問題