以下代码有什么问题?我收到分段错误

时间:2014-01-25 12:04:42

标签: c

当我尝试执行以下代码时,我输入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;
}

1 个答案:

答案 0 :(得分:5)

您在scanf中忘记了&运算符:

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

应该是:

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

顺便说一下,正确学习Indenting C Programs

  

我没有发现任何错误

是的,你的程序编译,但你不应该忽略警告。例如,在您的代码中使用gcc警告如下所述,描述了问题。

  

警告:格式‘%d’需要‘int *’类型的参数,但参数2的类型为‘int’     [-Wformat]

它说在scanf函数调用中的第二个参数num[i]是int类型的(因为int数组是num的声明),而根据第一个参数%d它应该是{ {1}},表示您需要传递地址,这意味着您忘记了int*操作符&&符号的地址。