如何使用C计算ISBN?

How to calculate ISBN using C?

下面是我的代码,应该计算一本书的 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 编号将保存到该数组中,但我不确定这是否可行..

问题始于 int isbn[]=0; 这声明了一个没有大小的数组,这是不可能的。

然后您将 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;

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

您应该以其他方式初始化您的 isbn 数组。例如 int isbn[20]。您应该给出一个足以容纳 ISBN 编号的长度。我只是以 20 为例。