目标是根据不同球员的制服号码将平均值分配给不同的球员。问题是它不断跳过第二个 printf,并且 switch 语句中的字符不起作用。我确定这是我的一个非常简单的错误,但我似乎找不到它。
int main(){
float ab;
float hits;
int un;
char pa;
printf("Please enter the player number, or -1 to exit. n");
scanf("%d%*c n", &un);
while( un!= -1)
{
printf("Please enter either an H for a hit or an O for a out, enter E to stop. n");
scanf("%c%*c", &pa);
while(pa != 'E')
{
switch (pa)
{
case 'h':
case 'H':
ab += 1;
hits +=1;
break;
case 'o':
case 'O':
ab+=1;
break;
default:
printf("Error: Please insert an O or H n");
break;
}
float average = (ab/hits);
printf("Player %d's score is equal to: %d n", un, average);
printf("Please enter the player number, or -1 to exit. n");
scanf("%d%*c n", &un);
}
}
return 0;
}
你的循环嵌套不是很正确,你的scanf
调用会挂起,你需要预先初始化ab
和hits
,并且你的最终printf
格式不正确。
以下是更正后的代码[请原谅无端的样式清理]:
#include <stdio.h>
int
main()
{
float ab;
float hits;
int un;
char pa;
while (1) {
printf("Please enter the player number, or -1 to exit.n");
#if 0
scanf("%d%*c n", &un);
#else
scanf(" %d", &un);
#endif
if (un == -1)
break;
ab = 0;
hits = 0;
printf("Please enter either an H for a hit or an O for a out, enter E to stop.n");
while (1) {
#if 0
scanf("%c%*c", &pa);
#else
scanf(" %c", &pa);
#endif
if ((pa == 'E') || (pa == 'e'))
break;
switch (pa) {
case 'h':
case 'H':
ab += 1;
hits += 1;
break;
case 'o':
case 'O':
ab += 1;
break;
default:
printf("Error: Please insert an O or Hn");
break;
}
}
float average = (ab / hits);
#if 0
printf("Player %d's score is equal to: %dn", un, average);
#else
printf("Player %d's score is equal to: %gn", un, average);
#endif
}
return 0;
}