首页 > 解决方案 > 为什么这个 ISBN 检查码把 '0' 变成 45?

问题描述

你能帮我找出为什么0数组中的第二个变成了45please。

纯文本的屏幕截图

一切都很好,但除了这个数字会使结果出错。我不知道这是怎么回事。

这是我的代码:

 #include <stdio.h>

 int getuserchoice() {  
     int n;
     printf("---ISBN Validate---");
     printf("\n1-ISBN Checking");
     printf("\n2-Quit");
     printf("\nSelect: ");
     scanf("%d", &n);
     return n;
 }

 int main() {
     long a[10];
     long sum = 0;
     int i = 0, n = 1;
     long x;
     if (getuserchoice() == 1) {
         printf("\nEnter the values for ISBN number : ");
         scanf("%ld", &x);
         if (x > 0) {
             while (x > 0) {
                 a[i] = x % 10;
                 x = x / 10;
                 i++;
             }
         }

         for (i = 0; i < 10; i++)
             printf("%ld\t", a[i]);
         for (i = 0; i < 10; i++) {
             sum += a[i] * n;
             n++;
         }
         if (sum % 11 == 0)
             printf("\nISBN Status: Valid!");
         else
             printf("\nISBN Status: Invalid!");
     } else
             printf("\nSee you later!");
     getchar();
     return 0;
}

标签: c

解决方案


默认情况下,未初始化的数组包含垃圾(字面意思是任何东西)。碰巧那个特定的元素包含 45(太棒了,不是吗?)。

它保持为 45,因为在读取数字时会丢弃前导 0(您应该将其读取为字符串 (C++) 或 char[]),因此您永远不会访问该特定数组元素来为其赋予有意义的值。

这是关于如何在 C 中用 0 初始化数组的帖子。


推荐阅读