c - 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”?
解决方案
为什么 for 循环没有完全执行?
printf("\nEnter:");
在第二个 scanf 之前添加检查它。循环完全执行,但 scanf 捕获空格。
所以,
添加
while((ch=getchar()!='\n')&&ch!=EOF);
在第二个 scanf 之前或将第二个 scanf 更改为
scanf(" %c%c", &num, &suit);
^
此语句是忽略空格(' ','\n',...)
推荐阅读
- python - How to send text to the Email field within https://accounts.google.com registration page?
- python - 在创建 VAE 模型时抛出异常“你应该实现一个 `call` 方法。”
- swift - Select multiple nodes while dragging
- visual-studio - How to enable the checkbox so that the project on xamarin can be compiled under Windows?
- python - How do I find shortest path in maze with BFS?
- java - Tomcat上的BeanPropertyRowMapper缓存问题
- excel - Format word table row from excel
- python-3.x - 无法将 ctypes 结构分配给 numpy 数组
- c# - Bindable property at ContentPage level
- postgresql - 使用 PostGIS 从一个属性的多个点的表中将点转换为多边形