C оператор переключения регистра не проходит полный цикл - PullRequest
1 голос
/ 17 марта 2020

Попытка решить проблему на kattis.com под названием «Бела», которая требует некоторого сравнения символов, но когда я запускаю свой код, функция scanf () не вызывается время последних пар для последних пар итераций l oop.

вот мой код:

#include <stdio.h>

int main( void ) {`


    char dom;
    int n;
    scanf("%d %c", &n, &dom);
    n*=4;

    int sum = 0;
    for (int i = 0; i < n; i++) {
            char num;
            char suit;
            scanf("%c%c", &num, &suit);

            switch (num) {

                    case 'A':
                            sum += 11;
                            break;
                    case 'K':
                            sum += 4;
                            break;
                    case 'Q':
                            sum += 3;
                            break;
                    case 'J':
                            if (suit == dom) { sum +=20;}
                            else { sum += 2;}
                            break;
                    case 'T':
                            sum+=10;
                            break;
                    case '9':
                            if (suit == dom){sum+=14;}
                            break;
                    case '8':
                            break;
                    case '7':
                            break;
                    default:

                            continue;

            }
    }

    printf("%d", sum);




    return 0;


}

, и когда я запускаю программу с этим тестом, я получаю это:

:~$ ./a.out
^V
2 S
TH
9C
KS
QS
JS
TD3
AD
JH
:~$ TD
TD: command not found
:~$ AD
AD: command not found
:~$ JH
JH: command not found

почему для l oop не выполняется полностью? Есть ли что-нибудь неправильно в моем коде, что оператор регистра переключателя не оценивает "TD", "AD", "JH"?

1 Ответ

1 голос
/ 17 марта 2020

почему for l oop не выполняется полностью?

Добавьте printf("\nEnter:"); перед вторым сканированием, проверьте его. L oop выполняется полностью, но scanf ловит пробелы.

Итак,

Добавить

 while((ch=getchar()!='\n')&&ch!=EOF);

Перед вторым сканированием или изменить второе сканирование на

 scanf(" %c%c", &num, &suit);
        ^

Эти операторы игнорируют пробелы (' ','\n',...)

...