以下是我应该计算书籍ISBN号的代码:
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
int isbn[] = 0;
printf("Please enter ISBN number: \n");
scanf("%d", &isbn);
int num = 0;
int times_by = 1;
long long sum;
long long sum1;
long long result = 0;
for (num = 0; num <= 9; num++){
sum = isbn[num] * times_by;
sum1 = sum + sum;
times_by++;
}
result = sum / 11;
if (result == 0){
printf("Yes\n");
}
else {
printf("No\n");
}
}
它告诉我isbn的发起者有问题。我试图创建一个数组,输入的ISBN号将保存到之后,虽然我不确定这是否可行..
答案 0 :(得分:3)
问题从int isbn[]=0;
开始。这声明了一个没有大小的arry,这是不可能的。
然后,您将isbn
作为单个int
阅读,然后您似乎想要使用ISBN的每个数字进行计算。
为此,我建议声明char isbn[14]={0};
(ISBN可以是13个字符,请参阅isbn)。
然后将其读作scanf("%13s", isbn);
并像处理它一样:
sum = (isbn[num]-'0') * times_by; // convert digit to number
注意:sum1 = sum + sum;
应为sum1 = sum1 + sum;
注意:result = sum / 11;
应为result = sum1 / 11;
注意:您必须初始化sum1
:long long sum1=0;
注意:result = sum1 / 11;
不会给你余数。使用result = sum1 % 11;
答案 1 :(得分:0)
行int isbn[] = 0;
是您的问题,您将数组的地址指向0x0,这不是您的应用程序的有效地址空间。
您应该以另一种方式初始化您的isbn数组。例如int isbn[20]
。您应该给出足以容纳ISBN号的长度。我只用了20作为例子。