Member 12919791 Ответов: 1

CS50 PSET 1 хакер плохой кредитный код


Цель состоит в том, чтобы выяснить, действителен ли номер кредитной карты.
Здесь Подробные Инструкции:
Набор Задач 1: C[^]
Могу ли я узнать, что заставляет мой код терпеть неудачу?
(Я не получаю запущенных ошибок)

Что я уже пробовал:

#include <stdio.h>
include <cs50.h>
include <stdlib.h>
include <ctype.h>
include <string.h>
include <math.h>
int main(void) {
char name[20]; char dist[3]; long long number = GetLongLong();
sprintf(name, "%lld", number );
int length = strlen(name);
if ( (length != 13) || (length != 15) || (length != 16) ) { printf("INVALID"); return 1; }
int SUM = 0; if ( (length == 13) || (length == 15) ) { for (int a = 1; a < length-1; a+=2) { int prodig = (name[a]-48)* 2; sprintf(dist, "%d", prodig); if (strlen(dist) == 2) { SUM = SUM + (dist[0]-48) + (dist[1]-48); } else { SUM += prodig; } }
   for (int a = 0; a < length; a+=2)
   {
       SUM += (name[a]-48);
   }
}
if (length == 16) { for (int a = 1; a < 17; a+=2) { int prodig = (name[a]-48)* 2; sprintf(dist, "%d", prodig); if (strlen(dist) == 2) { SUM = SUM + (dist[0]-48) + (dist[1]-48); } else { SUM += prodig; } }
   for (int a = 0; a < 15; a+=2)
   {
       SUM += (name[a]-48);
   }
}
if (SUM%10 != 0) { printf("INVALID"); return 1; }
else { if (name[0] == 3) { printf("AMEX"); }
   else if (name[0] == 5)
   {
       printf("MASTERCARD");
   }

   else
   {
       printf("VISA");
   }
}
return 0;
}

1 Ответов

Рейтинг:
2

OriginalGriff

Используйте отладчик. Это часть того, для чего он существует.
Поставьте точку останова в начале функции и шаг за шагом внимательно посмотрите на то, что происходит.

Но Сначала сделайте себе одолжение и отформатируйте свой код так, чтобы он имел постоянный отступ - это значительно облегчает понимание того, что происходит.
Это должно быть достаточно очевидно, как только вы войдете в него, что происходит и почему все идет не так.