扫描整数数组

时间:2015-03-25 00:43:10

标签: c arrays int

首先,我知道这可能是新手,但我刚开始。请尽量耐心等待。 我想创建一个函数,在找到数字'0'之前应该对所有数字求和。 例如。 “1230”应该返回“6”。 但我不明白如何扫描整数数组。 这是我的代码,编译器说“Segment fault(core dumped)”。 有什么问题?

#include <stdio.h>

int main(){
    int sum, i, x[1000];
    printf("Insert a number");
    scanf("%d", &x[i]);
    sum=0;

    for (i=0; x[i]!='0'; i++)
       sum=sum+x[i];

    printf("%d", sum);
    return 0;
}

3 个答案:

答案 0 :(得分:0)

'0'是char,不是整数。你应该写x[i]!=0

然而char可以自动转换为int,因此编译OK ...但是'0'转换为ASCII代码,因此您的程序等于x[i]!=48

如果数组中不存在0,则应检查数组边界以避免错误。你应该写i<1000 && x[i]!=0

编辑:你的scanf也是错误的,scanf只接受一个号码,而我没有被分配。我想你的意思是扫描整个字符串,然后逐个数字加起来。然后你应该使用char并写成这样:

int sum, i;
char x[1000];
scanf("%s", x);
for(int i=0; i<1000 && x[i]>'0' && x[i]<='9'; i++)
sum += (x[i] - '0');

答案 1 :(得分:0)

最简单的是一次读取一个字符。如果没有别的,这可以避免缓冲区溢出。

#include <stdio.h>

int main(void) {
    int sum=0, i;
    while ((i = getchar()) && i > '0' && i <= '9') sum += i - '0';
    printf("%d\n", sum);
    return 0;
}

答案 2 :(得分:0)

你应该在循环中使用scanf()语句。

并且您的代码提供分段错误的原因是可变的&#39; i&#39;没有初始化。 local uninitialized变量将包含垃圾值。用&#39; i&#39;如果有任何垃圾值,您的程序会尝试在用户空间之外的内存位置写入。