C case-switch 语句未通过完整循环运行

Posted

技术标签:

【中文标题】C case-switch 语句未通过完整循环运行【英文标题】:C case-switch statement not running through full loop 【发布时间】:2020-06-28 03:54:12 【问题描述】:

试图解决 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”?

【问题讨论】:

您为调查/调试此问题做了哪些工作?你是如何断定 switch 语句是问题所在?您是否尝试通过再次打印或在调试器中检查它们来准确测试输入的值?如果你这样做,你可能会发现一个换行符正在进入那里。然后你就可以开始考虑为什么了。 我打赌scanf("%c%c", &amp;num, &amp;suit); 留下num 包含'\n'(只是预感......) 【参考方案1】:

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

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

所以,

添加

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

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

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

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

【讨论】:

以上是关于C case-switch 语句未通过完整循环运行的主要内容,如果未能解决你的问题,请参考以下文章

条件语句,while循环语句:完整的温度转换程序

条件语句,while循环语句:完整的温度转换程序

条件语句,while循环语句:完整的温度转换程序

条件语句,while循环语句:完整的温度转换程序

条件语句,while循环语句:完整的温度转换程序

条件语句,while循环语句:完整的温度转换程序