试图在kattis.com上解决一个名为“贝拉”的问题,这需要进行一些字符比较,但是当我运行我的代码时,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”?
答案 0 :(得分:1)
为什么for循环无法完全执行?
在第二次scanf检查之前添加printf("\nEnter:");
。循环完全执行,但是scanf捕获空格。
所以
添加
while((ch=getchar()!='\n')&&ch!=EOF);
在第二次scanf之前或将第二次scanf更改为
scanf(" %c%c", &num, &suit);
^
此语句是忽略空格(' ','\n',...)