这是我的整数菜单,可根据需要工作: 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
答案 0 :(得分:3)
它不起作用,因为char
正在换行(输入密钥),请使用
char num = getchar();
仅仅得到钥匙。
答案 1 :(得分:1)
在每次新的迭代scanf("%c", &num);
读取尾随回车符时,这将导致执行默认情况,并将其写为scanf(" %c", &num);
。
答案 2 :(得分:0)
尝试使用fflush(stdin)。每次获得“ 1 \ n”的输入缓冲区在下一个while循环中仍保持“ \ n”,在第二次循环中,每次尝试都进入循环并发送默认消息。您也可以为“ \ n”条件添加另一个开关盒,以使其通过