C HP代码战争检查数字算法错误

C HP代码战争检查数字算法错误,c,windows,algorithm,C,Windows,Algorithm,问题: 这是我的密码: 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){

问题:

这是我的密码:

    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;
}
int checkdigit(){
int n,i,j,sum1,sum2,k;
char ch;
printf(“输入行数,然后输入代码!”);
scanf(“%d”和“&n”);
字符*代码[n];
int msum[n];
int fsum[n];
对于(i=0;i变化

fsum[i]=((msum+sum2)%10);

这是因为
msum
是一个整数数组,而
msum[i]
是一个整数。由于
msum
是一个数组,它的类型为
int*
,与二进制运算符
%
int
不兼容

char *codes[n];
是由
n
指针组成的数组,您不为这些指针分配内存,并尝试将值扫描到此位置,以便看到崩溃
#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;
}
整数校验位(整数数据[12]){ int i,偶数,奇数,结果; 偶数=奇数=0; 对于(i=0;i<11;++i){ 如果(i&1) 偶数+=数据[i]; 其他的 奇数+=数据[i]; } 结果=(奇数*3+偶数)%10; 如果(结果) 结果=10-结果; 返回数据[11]=结果; } int main(){ int n; scanf(“%d”和“&n”); 整数编码[n][12]; int i,j; 对于(i=0;i
是,msum是一个数组名
scanf(“%s”,code[i]);
code[i]
不是指分配的内存。是的,我知道了,但你能解释一下为什么它在使用第一个UPC代码后崩溃。@pradyumnarahul我真的很抱歉,告诉你这是一个单独的问题,因为它与你的问题无关,你将不得不问一个新问题。如果你认为这个答案解决了你现在的问题,请接受这是一个答案,这样更大的社区就会知道这个问题已经得到了回答。再次抱歉。那么你建议怎么做。@pradyumnarahul建议使用
int-code[n][11];
int-code[n][12];
@pradyumnarahul,因为你有更多的错误。我有一个post示例。if(i&1)的意思是
if(i%2==1)
mean digit偶数位置。谢谢,如果我还有任何问题,我将求助于您。
#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;
}