当我输入一个字符而不是一个数字时,Do-while输出“无限”

时间:2015-11-17 08:01:34

标签: c

对于练习,我正在编写一个充当主菜单的程序。我希望用户在选项中进行选择。当用户输入一个整数时它工作正常,但是当输入一个字符时它会打印这个

enter image description here

无限而不只是打印“无效......”然后要求另一个输入。

#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();
}

1 个答案:

答案 0 :(得分:2)

scanf看到无法根据格式解析的输入时,它只是将输入留在缓冲区中,它不会将其删除。因此,如果您尝试在循环中使用scanf,则下一次迭代scanf将看到上次无法解析的完全相同的输入,依此类推。

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