c - 相同的代码不同的结果(C编程语言)
问题描述
此代码在 CS50 Web IDE 中运行时,预期结果会运行 Luhn 算法,然后正确打印出使用的信用卡类型。
#include <stdio.h>
#include <string.h>
int main(void){
long ccNumber;
do{
printf("Insert CC Number: \n");
scanf("%ld", &ccNumber);
} while (ccNumber <= 0);
long ccCopy = ccNumber;
int sum;
int count = 0;
long divisor = 10;
char result[16];
while(ccCopy > 0){
int lastDigit = ccCopy % 10;
sum = sum + lastDigit;
ccCopy = ccCopy / 100;
printf("%i\n", sum);
}
ccCopy = ccNumber / 10;
while(ccCopy > 0){
int lastDigit = ccCopy % 10;
int timesTwo = lastDigit * 2;
sum = sum + (timesTwo % 10) + (timesTwo / 10);
ccCopy = ccCopy / 100;
}
ccCopy = ccNumber;
while(ccCopy != 0){
ccCopy = ccCopy / 10;
count++;
}
for(int i = 0; i < count - 2; i++){
divisor = divisor * 10;
}
int firstDigit = ccNumber / divisor;
int firstTwo = ccNumber / (divisor / 10);
if(sum % 10 == 0){
if(firstDigit == 4 && (count == 13 || count == 16)){
strcpy(result, "VISA");
} else if((firstTwo == 34 || firstTwo == 37) && count == 15){
strcpy(result, "AMEX");
} else if((firstTwo > 50 || firstTwo < 56) && count == 16){
strcpy(result, "MASTERCARD");
} else {
strcpy(result, "INVALID");
}
}
else {
strcpy(result, "INVALID lol");
}
printf("%i\n", sum);
printf("%s\n", result);
}
问题是,当复制并粘贴到 VSCode 中时,总和的计算方式不同
这些是 CS50 IDE 的结果:
Insert CC Number:
4012888888881881,
1,
9,
17,
25,
33,
41,
43,
43,
90,
VISA
这些是来自 VSCode 的结果,具有完全相同的代码复制和粘贴:
Insert CC Number:
4012888888881881,
15774464,
15774472,
15774480,
15774488,
15774496,
15774504,
15774506,
15774506,
15774553,
INVALID lol
printf
原始代码在第一个 while 循环中没有显示总和,我添加它来调试结果。
考虑到代码是复制和粘贴的,这让我很困惑。
解决方案
sum
未初始化为0
,因此您的行为未定义。然后你会得到不同的结果,具体取决于编译器、平台、天气......
推荐阅读
- git - Skip already merged commits when rebasing feature
- gitlab - GitLab CI/CD:是否可以在一个文件中存储多个 CI/CD 变量?
- javascript - Javascript 代码未在 app.component.html 中执行
- python - Matplotlib imshow 的循环插值与循环颜色图
- google-sheets - 从 Google 表格查询中排除不同工作表上的列中的所有值
- c++ - 多个输入流与一个使用 seekg 的输入流
- c# - C# 将泛型表单作为参数传递
- javascript - 将文件对象转换为对象数组
- laravel - laravel 7 php artisan route:缓存不起作用
- python - 将编码字符串发送到服务器时出现 Python 错误