c - 如何使带字符的开关盒工作?

标签 c arrays switch-statement

<分区>

我目前正在为我的类(class)做作业。在 C 中,我必须制作一个与足球队花名册一起使用的程序,您可以在其中更新、替换、比较球员等。但是,现在我无法使菜单中的任何选项起作用。使用我的代码可能会更好地理解这一点:

#include <stdio.h>

int main(void) {

    int i, jersey, rating, newJersey, newRating, playerJerseyNumber[5], playerRating[5];
    char choice;

    for (i = 0; i < 5; i++)
    {
        printf("Enter player %d's jersey number: \n", (i + 1));
        scanf("%d", &playerJerseyNumber[i]);
        printf("Enter player %d's rating: \n\n", (i + 1));
        scanf("%d", &playerRating[i]);
    }

    printf("ROSTER\n");
    for (i = 0; i < 5; i++)
    {
        printf("Player %d -- Jersey number: %d, Rating: %d\n", (i + 1), playerJerseyNumber[i], playerRating[i]);
    }

    printf("\n\nMENU \nu - Update player rating \na - Output players above a rating \nr - Replace player \no - Output roster \nq - Quit\n\n");
    printf("Choose an option: \n");
    scanf("%c", &choice);

    switch (choice) {
    case 'u':
    {
        printf("Enter a jersey number: \n");
        scanf("%d", &jersey);
        printf("Enter a new rating for player: \n");
        scanf("%d", &newRating);
        for (i = 0; i < 5; i++)
        {
            if (jersey == playerJerseyNumber[i])
            {
                playerRating[i] = newRating;
            }
        }
        break;
    }

    case 'a':
    {
        printf("Enter a rating: \n");
        scanf("%d", &rating);
        printf("\n ABOVE %d\n", rating);
        for (i = 0; i < 5; i++)
        {
            if (playerRating[i] > rating)
            {
                printf("Player %d -- Jersey number: %d, Rating: %d\n", (i + 1), playerJerseyNumber[i], playerRating[i]);
            }
        }
        break;
    }

    case 'r':
    {
        printf("Enter a jersey number: \n");
        scanf("%d", &jersey);
        printf("Enter a new jersey number: \n");
        scanf("%d", &newJersey);
        printf("Enter a rating for the new player: \n");
        scanf("%d", &newRating);
        for (i = 0; i < 5; i++)
        {
            if (jersey == playerJerseyNumber[i])
            {
                playerJerseyNumber[i] = newJersey;
                playerRating[i] = newRating;
            }
        }
        break;
    }

    case 'o':
    {
        printf("ROSTER\n");
        for (i = 0; i < 5; i++)
        {
            printf("Player %d -- Jersey number: %d, Rating: %d\n", (i + 1), playerJerseyNumber[i], playerRating[i]);
        }
        break;
    }

    default:
        printf("didnt work");
        break;
    }

    return 0;
}

现在,我的代码的第一部分可以正常工作。但是,如果我尝试使用菜单中的任何选项,它们都不起作用。它会自动转到默认情况并打印“无效”。

现在,我正在测试

84 7
23 4
4 5
30 2
66 9
u
4
6
o
q

这不起作用,即使它应该将 jersey #4 更新为 6 的评级。

关于为什么这不起作用的任何想法?谢谢。

最佳答案

use scanf(" %c", &choice) 

格式字符串中的空格告诉 scanf 跳过前导空格,第一个非空格字符将使用 %c 转换说明符读取。

引用Here

关于c - 如何使带字符的开关盒工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53253942/

相关文章:

java - 在数组上存储 Piece 对象 - java Tetris Tutorial

c++ - 如何从缓冲区读取特定字符串

iphone - NSMutableArray removeAllObjects 导致崩溃

javascript - jQuery 不工作

c - 从 C 中的符号链接(symbolic link)调用时如何使用 getcwd 获取可执行路径

java - JNI 段错误

c - 尝试删除文件时获取权限被拒绝错误

c - 绕过 BIOS 低级别启动当前操作系统以外的另一个操作系统

javascript - 我可以在 Switch 语句上使用对象吗?

c# - 使用基于枚举 C# 的开关