繁体   English   中英

扫描整数数组

[英]Scan integers array

首先,我知道这可能是新手,但我才刚刚开始。 请,请耐心等待。 我想做一个函数,在找到数字“ 0”之前应该对所有数字求和。 例如,“ 1230”应返回“ 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 ,所以编译就可以了……但是'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”具有任何垃圾值,则您的程序正在尝试在用户空间之外的内存位置进行写入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM