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

标签 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;
}

最佳答案

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

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

应该是:

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

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

I didn't find any errors

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

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’
[-Wformat]

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

关于c - 以下代码有什么问题?我收到段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350275/

相关文章:

c++ - 将 double 与整数进行同一性比较时,什么会转换成什么?

c - 为什么在将二维数组传递给 C 函数时必须提供维度?

c - 为什么在 printf 中使用 "+"运算符时字符串会被修剪

c - 我如何使用 For 循环初始化值开始取决于条件 for(k = (Char[i] == ' ' ? i - 1 : i ); j<k ; j++, k--)

c - 如果这两个冒泡排序实现具有相似的步数和交换数,为什么它们在运行时有显着差异?

c - 测量 cortex m7 上的时钟周期计数

C 段错误 : 11 fgets

c - 访问结构或 union 中的填充是否安全?

c - c中的二叉树段失败

c - 在 C 条件语句中可以使用多个整数和一个操作数吗?