为什么switch语句中的情况1不';不行?

为什么switch语句中的情况1不';不行?,c,scanf,C,Scanf,如果我选择案例1,什么都没有发生,我不知道问题出在哪里,案例1被忽略,它跳到下一个迭代 这是我通过选择案例1得到的结果: Enter -1 to quit

如果我选择案例1,什么都没有发生,我不知道问题出在哪里,案例1被忽略,它跳到下一个迭代

这是我通过选择案例1得到的结果:

Enter -1 to quit                                                                                                                                                                                 
Enter your choice: 1                                                                                                                                                                             

Enter -1 to quit                                                                                                                                                                                 
Enter your choice:   
它应该要求我提供用户输入,然后打印它

#include<stdio.h>
int main()
{
    int I;
    char* str[100];
    do
    {
        puts("Enter -1 to quit");
        printf("Enter your choice: ");
        scanf("%d",&I);
        switch(I)
        {            

            case 1:
            fgets(str,100,stdin);
            printf(str);
            break;
            case 2:
            printf("45\n");
            break;
            case -1:
            puts("Bye");
            break;
            default:
            printf("default\n");
        }
    }while(I != -1);
    return 0;
}
#包括
int main()
{
int I;
char*str[100];
做
{
看跌期权(“输入-1表示退出”);
printf(“输入您的选择:”);
scanf(“%d”、&I);
开关(一)
{            
案例1:
fgets(str,100,stdin);
printf(str);
打破
案例2:
printf(“45\n”);
打破
案例1:
卖出(“再见”);
打破
违约:
printf(“默认值”);
}
}而(I!=-1);
返回0;
}

它确实有效
fgets
读取上一个
scanf
留下的
\n
数据。危险<编码>printf(str)是一个即将发生的漏洞,请不要这样做。它应该是
printf(“%s”,str)将printf放在fgets之前,您将看到fgets被实际执行……或者将数据括在分隔标记中,例如
printf(“[%s]”,str)fgets
和数据输入菜单选项,然后将
sscanf
应用于输入字符串。