如何用C计算ISBN?

时间:2018-01-10 13:08:03

标签: c cs50

以下是我应该计算书籍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号将保存到之后,虽然我不确定这是否可行..

2 个答案:

答案 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;

注意:您必须初始化sum1long long sum1=0;

注意:result = sum1 / 11;不会给你余数。使用result = sum1 % 11;

答案 1 :(得分:0)

int isbn[] = 0;是您的问题,您将数组的地址指向0x0,这不是您的应用程序的有效地址空间。

您应该以另一种方式初始化您的isbn数组。例如int isbn[20]。您应该给出足以容纳ISBN号的长度。我只用了20作为例子。