C “边做边输出”;“无限”;当我输入字符而不是数字时
为了练习,我正在编写一个程序,作为主菜单。我希望用户在选项中进行选择。当用户输入一个整数时,它可以正常工作,但当输入一个字符时,它会打印这个值 而不是只打印“无效…”然后请求另一个输入C “边做边输出”;“无限”;当我输入字符而不是数字时,c,C,为了练习,我正在编写一个程序,作为主菜单。我希望用户在选项中进行选择。当用户输入一个整数时,它可以正常工作,但当输入一个字符时,它会打印这个值 而不是只打印“无效…”然后请求另一个输入 #include <stdio.h> #include <conio.h> int main() { int menu_choice, User_Num, MENU, count; MENU=1; do {
#include <stdio.h>
#include <conio.h>
int main()
{
int menu_choice, User_Num, MENU, count;
MENU=1;
do
{
printf(" *---------------------------------------*\n");
printf(" | |\n");
printf(" | 1. Individual 2. Group 3.Exit |\n");
printf(" | |\n");
printf(" *---------------------------------------*\n\n");
printf(" -----------------------------------------------------------------\n");
printf("| Type '1' if you want to enter as an individual |\n");
printf("| Type '2' if you want to know enter as a group |\n");
printf("| Type '3' if you want to to stop the program |\n");
printf(" -----------------------------------------------------------------\n");
printf("What is your choice?");
scanf(" %d", &menu_choice);
if (menu_choice==1)
{
User_Num=1;
printf("Accepted\n");
}
else if (menu_choice==2)
{
do
{
printf("How many users?: ");
scanf(" %d", &User_Num);
if (User_Num<2)
printf("Invalid Input. Try Again \n");
} while (User_Num<2);
printf("Accepted\n");
}
else if (menu_choice==3)
{
printf("Good Bye and Thank You");
MENU=0;
}
else
{
printf("Invalid Input. Try Again \n");
}
} while (MENU);
getch();
}
#包括
#包括
int main()
{
int菜单选项、用户数、菜单、计数;
菜单=1;
做
{
printf(“*---------------------------------------*\n”);
printf(“| |\n”);
printf(“| 1.个人2.组3.退出|\n”);
printf(“| |\n”);
printf(“*---------------------------------------*\n\n”);
printf(“----------------------------------------------------------------\n”);
printf(“如果您想以个人身份输入,请键入“1”);
printf(“|键入'2'如果您想知道作为组输入|\n”);
printf(“如果要停止程序,请键入“3”);
printf(“----------------------------------------------------------------\n”);
printf(“您的选择是什么?”);
scanf(“%d”,菜单选择(&U);
如果(菜单选项==1)
{
用户数量=1;
printf(“已接受的”);
}
else if(菜单选项==2)
{
做
{
printf(“有多少用户?:”);
scanf(“%d”和用户数量);
如果(User_NumWhenscanf
看到无法按照格式解析的输入,那么它只是将输入留在缓冲区中,不会将其删除。因此,如果尝试在循环中使用scanf
,下一次迭代scanf
将看到与上次无法解析的输入完全相同的输入,依此类推
因此,我建议您使用fgets
将整行内容读入缓冲区,并使用sscanf
解析您自己的缓冲区。您需要检查sscanf
返回的内容,以了解它是否能够解析任何内容。您需要清理剩余的无效馈送到scanf()。很抱歉问这个问题,所以添加这个就足够了,还是我仍然缺少什么?char buffer[128];fgets(buffer,128,stdin);sscanf(buffer,“%d”&菜单选项);@TheYellowOcean是的,应该足够了。但我仍然建议您检查返回的内容,看看它是否能够正确解析数字。