为什么我的整数菜单有效但我的字符菜单无效?

时间:2018-10-11 04:13:58

标签: c

这是我的整数菜单,可根据需要工作: https://gist.github.com/hisgotthewholeworld/81d2d96a7a4736d85c22b28d5bf36435

这是我的角色菜单,无法正常运行: https://gist.github.com/hisgotthewholeworld/36ae2b9b7546cc0af627d399c82c7177

我的角色菜单在输入时使用选定的大小写,但随后立即使用默认大小写。我的整数数组似乎工作正常,但是我已经做了我所知道的一切,将其转换为可以处理字符。任何帮助将不胜感激。这是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char read_number(void);

int main(void)
{
  char choice;
  printf("Make a choice\n");

  while ((choice = read_number())!= '5')
  {
    switch (choice)
    {
      case '1' :
        printf("Choice 1\n");
        printf("Make a choice\n");
        break;
      case '2' :
        printf("Choice 2\n");
        printf("Make a choice\n");
        break;
      case '3' :
        printf("Choice 3\n");
        printf("Make a choice\n");
        break;
      case '4' :
        printf("Choice 4\n");
        printf("Make a choice\n");
        break;
      default :
        printf("Invalid choice\n");
        break;
    }
  }

  return 0;
}

char read_number (void)
{
  char num;
  scanf("%c", &num);
  return num;
}

这也是我得到的输出:

做出选择

1

选择1

做出选择

无效的选择

2

选择2

做出选择

无效的选择

3

选择4

做出选择

无效的选择

4

选择4

做出选择

无效的选择

5

3 个答案:

答案 0 :(得分:3)

它不起作用,因为char正在换行(输入密钥),请使用 char num = getchar(); 仅仅得到钥匙。

答案 1 :(得分:1)

在每次新的迭代scanf("%c", &num);读取尾随回车符时,这将导致执行默认情况,并将其写为scanf(" %c", &num);

答案 2 :(得分:0)

尝试使用fflush(stdin)。每次获得“ 1 \ n”的输入缓冲区在下一个while循环中仍保持“ \ n”,在第二次循环中,每次尝试都进入循环并发送默认消息。您也可以为“ \ n”条件添加另一个开关盒,以使其通过