【问题标题】:Chars wont compare correctly [duplicate]字符无法正确比较[重复]
【发布时间】:2019-05-04 08:50:06
【问题描述】:

这是我目前所写的:

int main(void) {
   int playerJerseys[5];
   int playerRatings[5];

   printf("Enter player 1's jersey number:\n");
   scanf("%d",&playerJerseys[0]);
   printf("Enter player 1's rating:\n\n");
   scanf("%d",&playerRatings[0]);
   printf("Enter player 2's jersey number:\n");
   scanf("%d",&playerJerseys[1]);
   printf("Enter player 2's rating:\n\n");
   scanf("%d",&playerRatings[1]);
   printf("Enter player 3's jersey number:\n");
   scanf("%d",&playerJerseys[2]);
   printf("Enter player 3's rating:\n\n");
   scanf("%d",&playerRatings[2]);
   printf("Enter player 4's jersey number:\n");
   scanf("%d",&playerJerseys[3]);
   printf("Enter player 4's rating:\n\n");
   scanf("%d",&playerRatings[3]);
   printf("Enter player 5's jersey number:\n");
   scanf("%d",&playerJerseys[4]);
   printf("Enter player 5's rating:\n\n");
   scanf("%d",&playerRatings[4]);

   printf("ROSTER\n");
   printf("Player 1 -- Jersey number: %d, Rating: %d\n",playerJerseys[0],playerRatings[0]);
   printf("Player 2 -- Jersey number: %d, Rating: %d\n",playerJerseys[1],playerRatings[1]);
   printf("Player 3 -- Jersey number: %d, Rating: %d\n",playerJerseys[2],playerRatings[2]);
   printf("Player 4 -- Jersey number: %d, Rating: %d\n",playerJerseys[3],playerRatings[3]);
   printf("Player 5 -- Jersey number: %d, Rating: %d\n\n",playerJerseys[4],playerRatings[4]);

   char selection;
   printf("MENU\n");
   printf("u - Update player rating\n");
   printf("a - Output players above a rating\n");
   printf("r - Replace player\n");
   printf("o - Output roster\n");
   printf("q - Quit\n\n");
   printf("Choose an option:\n");
   scanf("%c",&selection);

   if(selection == 'q'){
      return 0;  
   }
   else if(selection == 'u'){
      int userJersey;
      int userRating;
      printf("Enter a jersey number:\n");
      scanf("%d",&userJersey);
      for(int i = 0; i < 5; ++i){
         if(playerJerseys[i] == userJersey){
            printf("Enter a new rating for player:\n");
            scanf("%d",&userRating);
            playerRatings[i] = userRating; 
         }
      }
   }
   else if(selection == 'o'){
      printf("ROSTER\n");
      printf("Player 1 -- Jersey number: %d, Rating: %d\n",playerJerseys[0],playerRatings[0]);
      printf("Player 2 -- Jersey number: %d, Rating: %d\n",playerJerseys[1],playerRatings[1]);
      printf("Player 3 -- Jersey number: %d, Rating: %d\n",playerJerseys[2],playerRatings[2]);
      printf("Player 4 -- Jersey number: %d, Rating: %d\n",playerJerseys[3],playerRatings[3]);
      printf("Player 5 -- Jersey number: %d, Rating: %d\n\n",playerJerseys[4],playerRatings[4]);
   }
   return 0;
}

当提供此输入时:

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

这是输出:

Player 1 -- Jersey number: 84, Rating: 7
Player 2 -- Jersey number: 23, Rating: 4
Player 3 -- Jersey number: 4, Rating: 5
Player 4 -- Jersey number: 30, Rating: 2
Player 5 -- Jersey number: 66, Rating: 9

MENU
u - Update player rating
a - Output players above a rating
r - Replace player
o - Output roster
q - Quit

Choose an option:

想要的输出是:

ROSTER
Player 1 -- Jersey number: 84, Rating: 7
Player 2 -- Jersey number: 23, Rating: 4
Player 3 -- Jersey number: 4, Rating: 6
Player 4 -- Jersey number: 30, Rating: 2
Player 5 -- Jersey number: 66, Rating: 9

MENU
u - Update player rating
a - Output players above a rating
r - Replace player
o - Output roster
q - Quit

Choose an option:

当提供 u 作为输入时,后续数字应该会更改其中一名玩家的评分,但对我来说它不起作用。我不确定我是否只是不知道如何比较字符?还是我的 if 语句和 else-if 语句设置不正确?任何建议表示赞赏。

【问题讨论】:

  • 请尝试重新表述您的问题,以包含 minimum 工作示例。那里有很多不必要的代码。尝试将其简化为字符比较。
  • 我看不出输出有什么不同,对吗?您是否还在调试器中逐行运行代码,检查变量并查看发生了什么?
  • 更新播放等级后程序退出。我没有看到“菜单”上有任何循环。 “这是输出”如何显示?
  • OT:当调用任何scanf() 系列函数时,始终检查返回值(而不是参数值)以确保操作成功
  • 关于:scanf("%c",&amp;selection); 你在哪里允许 '\n' 被吸收/跳过 建议:if( scanf(" %c",&amp;selection) != 1) { fprintf( stderr, "failed to input menu selection\n" ); 注意%c 前面的空间,所以任何“空白”都会被消耗掉

标签: c if-statement char


【解决方案1】:

尝试在 %c 之前留出空格,这样可以。 喜欢

scanf(" %c", &amp;selection);

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2021-01-08
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多