Прежде всего, некоторые из ваших if
условий неправильные. Например,
if(totaldigits != 13 || totaldigits != 14 || totaldigits != 16)
Вы хотите проверить, равны ли итоговые цифры 13 или 14 или 16, но здесь вы проверяете , если итоговые цифры не равны 13, затем выведите неверные значения или * 1007. * если totaldigits не равно 14, выведите неверное значение и т. д. Следовательно, он всегда будет печатать неверно. Вам нужно использовать && (AND)
вместо || (OR)
.
Та же проблема существует и в этой строке.
if(master!=51 || master!=52 ||master!=53 ||master!=54 ||master!=55)
Другая проблема заключается в том, что вы ставите 1 ненужный 0 для деления вэта строка, поэтому она всегда возвращает 0.
int number8 = ((ccnumber/10000000000000000) % 10) *2; // 1 zero unnecessary
Как предлагается в комментариях, вам может потребоваться создать массив для хранения отдельных цифр вместо использования 16 различных целых чисел. Когда у вас есть массив, вы можете делать деления в цикле for, чтобы не путать множество нулей. Например, вы можете обратиться к этой ссылке Решение проблемы проверки кредитной карты cs50 .