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