首页 > 解决方案 > C case-switch 语句未通过完整循环运行

问题描述

试图在 kattis.com 上解决一个名为“Bela”的问题,这需要一些字符比较,但是当我运行我的代码时,scanf() 函数在最后几次循环的最后几次迭代中没有被调用。

这是我的代码:

#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

为什么 for 循环没有完全执行?我的代码是否存在任何固有错误,即 switch case 语句不评估“TD”、“AD”、“JH”?

标签: cfor-loopcharswitch-statement

解决方案


为什么 for 循环没有完全执行?

printf("\nEnter:");在第二个 scanf 之前添加检查它。循环完全执行,但 scanf 捕获空格。

所以,

添加

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

在第二个 scanf 之前或将第二个 scanf 更改为

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

此语句是忽略空格(' ','\n',...)


推荐阅读