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_NumWhen
scanf
看到无法按照格式解析的输入,那么它只是将输入留在缓冲区中,不会将其删除。因此,如果尝试在循环中使用
scanf
,下一次迭代
scanf
将看到与上次无法解析的输入完全相同的输入,依此类推


因此,我建议您使用
fgets
将整行内容读入缓冲区,并使用
sscanf
解析您自己的缓冲区。您需要检查
sscanf
返回的内容,以了解它是否能够解析任何内容。

您需要清理剩余的无效馈送到scanf()。很抱歉问这个问题,所以添加这个就足够了,还是我仍然缺少什么?char buffer[128];fgets(buffer,128,stdin);sscanf(buffer,“%d”&菜单选项);@TheYellowOcean是的,应该足够了。但我仍然建议您检查返回的内容,看看它是否能够正确解析数字。