首页 > 解决方案 > 相同的代码不同的结果(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 循环中没有显示总和,我添加它来调试结果。

考虑到代码是复制和粘贴的,这让我很困惑。

标签: ccs50

解决方案


sum未初始化为0,因此您的行为未定义。然后你会得到不同的结果,具体取决于编译器、平台、天气......


推荐阅读