扫描整数数组
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.
之外的内存位置
首先,我知道这可能是新手,但我才刚刚开始。请耐心等待。 我想创建一个函数,在找到数字“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.
之外的内存位置