当我尝试执行以下代码时,我输入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;
}
答案 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*
操作符&
&符号的地址。