【发布时间】: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", &num, &suit);留下num包含'\n'(只是预感......)
标签: c for-loop char switch-statement