扫描整数数组

Scan integers array

首先,我知道这可能是新手,但我才刚刚开始。请耐心等待。 我想创建一个函数,在找到数字“0”之前对所有数字求和。 例如。 “1230”应该 return“6”。 但我不明白如何扫描整数数组。 这是我的代码,编译器说“段错误(核心转储)。 怎么了?

#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;
}

'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');

最简单的是一次读一个字符。如果不出意外,这可以避免缓冲区溢出。

#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;
}

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

您的代码出现分段错误的原因是变量 'i' 未初始化。本地未初始化的变量将包含垃圾值。 'i' 具有任何垃圾值,您的程序正试图写入用户 space.

之外的内存位置