问题: http://www.hpcodewars.org/past/cw17/problems/Prob02--CheckDigit.pdf
这是我的代码:
int checkdigit(){
int n,i,j,sum1,sum2,k;
char ch;
printf("Enter the number of lines.Then enter ther the codes!");
scanf("%d",&n);
char *codes[n];
int msum[n];
int fsum[n];
for(i=0;i<n;++i){
scanf("%s",codes[i]);
}
for(i=0;i<n;++i){
for(j=0,k=3;j<21;j+=3,k+=3){
char *num;
num=codes[i];
ch=num[j];
sum1+=atoi(ch);
if(k<21)
ch=num[k];
sum2+=atoi(ch);
}
msum[i]=sum1*3;
fsum[i]=((msum[i]+sum2)%10);
if(fsum[i]!=0)
fsum[i]-=10;
}
for(k=0;k<sizeof(fsum);k++){
printf("%s %d",codes[k],fsum[k]);
}
return 0;
}
在将第一个UPC代码作为输入后,代码现在崩溃。
答案 0 :(得分:0)
更改
fsum[i]=((msum+sum2)%10);
到
fsum[i]=((msum[i]+sum2)%10);
这是因为msum
是一个整数数组,msum[i]
是一个整数。由于msum
是一个数组,因此它的类型为int*
,与二元运算符int
的{{1}}不兼容
答案 1 :(得分:0)
下面
char *codes[n];
是n
指针的数组,你没有为这些指针分配内存并尝试将值扫描到这个位置,所以你看到崩溃
答案 2 :(得分:0)
#include <stdio.h>
int checkdigit(int data[12]){
int i, even, odd, result;
even = odd = 0;
for(i = 0; i < 11; ++i){
if(i & 1)
even += data[i];
else
odd += data[i];
}
result = (odd * 3 + even) % 10;
if(result)
result = 10 - result;
return data[11] = result;
}
int main(){
int n;
scanf("%d", &n);
int codes[n][12];
int i, j;
for(i = 0; i < n; ++i){
for(j = 0; j < 11; ++j){
scanf("%d", &codes[i][j]);
}
checkdigit(codes[i]);
}
for(i = 0; i < n; ++i){
for(j = 0; j < 12; ++j){
if(j) putchar(' ');
printf("%d", codes[i][j]);
}
putchar('\n');
}
return 0;
}