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

Lea*_*neR 3 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;
}
Run Code Online (Sandbox Code Playgroud)

Gri*_*han 5

你忘&了scanf中的操作符:

scanf("%d", num[i]); 
Run Code Online (Sandbox Code Playgroud)

应该:

scanf("%d", &num[i]); 
 //         ^^
Run Code Online (Sandbox Code Playgroud)

顺便说一下,正确学习缩进C程序.

我没有发现任何错误

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

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

它说scanf函数调用中的参数第二个num[i]是int类型(因为numint数组的声明),而根据%d它应该是第一个参数int*,意味着你需要传递地址这意味着你忘记&了运算&符&符号的地址.