C语言 在循环时遇到嵌套问题



目标是根据不同球员的制服号码将平均值分配给不同的球员。问题是它不断跳过第二个 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调用会挂起,你需要预先初始化abhits,并且你的最终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;
}

最新更新