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