c - 为什么这个 ISBN 检查码把 '0' 变成 45?
问题描述
你能帮我找出为什么0
数组中的第二个变成了45
please。
一切都很好,但除了这个数字会使结果出错。我不知道这是怎么回事。
这是我的代码:
#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;
}
解决方案
默认情况下,未初始化的数组包含垃圾(字面意思是任何东西)。碰巧那个特定的元素包含 45(太棒了,不是吗?)。
它保持为 45,因为在读取数字时会丢弃前导 0(您应该将其读取为字符串 (C++) 或 char[]),因此您永远不会访问该特定数组元素来为其赋予有意义的值。
推荐阅读
- html - Masonry Layout:防止div打散或被切割
- java - Javalin Websocket 客户端静默连接失败
- r - R使用pivot_longer从宽到长重塑名称值对
- python - 尝试访问 numpy 中的单个数组元素会访问一个序列
- pine-script - 需要帮助在日线图上绘制每月魔术趋势指标
- windows - Powershell 和 IBM/Lotus Domino
- swift - 是否可以使用 Catalyst API 向 Touchbar 添加可滚动的按钮列表?
- reactjs - React 道具加载速度不够快
- node.js - Sequelize:包含查询中的无效值符号(col)
- objective-c - NSString** 作为 swift 函数参数