CS50信用问题正在跳过“否则”部分

我真的被困在这里。该计划会为无效的信用卡号提供正确的答案,但永远不会说它的VISA,AMEX或MASTERCARD。

我需要发布完整的代码,因为我对C语言没有太多的经验。

最后,校验和部分也可能是“笨拙的”,但我总是收到错误消息。

#include <cs50.h>
#include <stdio.h>

int main(void)
{
  long long card;
  int checksum = 0;
  do
   {
    card = get_long_long("Number: ");
   }while (card <= 0);


    int count = 0;
    while (card != 0) {
        card /= 10;     // n = n/10
        ++count;
    }

if(count != 16 && count != 13 && count != 15){
      printf("INVALID\n");
  }
  else if(checksum != 0){
      printf("INVALID\n");
   }
  else if(card >= 34e13 || card >= 37e13){
        printf("AMEX\n");
    }
  else if(card >= 51e14 || card >= 52e14 || card >= 53e14 || card >= 54e14 || card >= 55e15) {
       printf("MASTERCARD\n");
           }
  else if(card >= 4e15 || card >=4e12) {
        printf("VISA\n");
        }
  else {
     printf("INVALID\n");
  }
}

int checksum(long long card_nr)
{
    int sum = 0;
    for (int i=0;card_nr !=0; i++, card_nr/=10 )
    {
        if(i % 2 == 0)
            sum += card_nr % 10;
        else
        {
            int digit = 2 * (card_nr % 10);
            sum += digit / 10 + digit % 10;
        }
    }
    return (sum % 10) == 0;
}

该程序正在编译中,可能存在重大问题或仅包含一些括号。谢谢你的帮助。