为啥这段代码没有进入循环??



#include<stdio.h>
#include<string.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    char str1[1000];
    gets(str1);
    while (n--)//n组测试
    {
        int m = 0;
        scanf("%d", &m);
        switch (m)//后接插入
        {
               case 1:
            {
                char str2[1000] = { '\0' };
                gets(str2);
                strcat(str1, str2);
                puts(str1);
            }
                case 2://截取a,b的字符串
            {
                int a, b;
                scanf("%d%d", &a, &b);//
                char temp2[1000] = { '\0' };
                for (int i = a; i <= b; i++)
                    temp2[i-a] = str1[i];
                char str1[1000] = {'\0' };
                strcpy(str1, temp2);
                puts(str1);
            }
                case 3://插入片段在文章第a个字符前面插入
            {
                int a = 0;
                scanf("%d", &a);
                char str3[1000] = { '\0' };
                gets(str3);
                int len_str1 = strlen(str1);
                int len_str3 = strlen(str3);
                char temp3[1000] = { '\0' };
                for (int i = 0; i < a - 1; i++)
                {
                    temp3[i] = str1[i];
                }
                strcat(temp3, str3);
                for (int i = a + len_str3 - 2; i < len_str3 + len_str1; i++)
                {
                    temp3[i] = str1[i - len_str3 + 2];
                }
                puts(str1);
            }
               case 4://查找
            {
                    char str4[1000] = { '\0' };
                    gets(str4);
                    char* ret = strstr(str1, str4);
                    printf("%s",ret);
            }
        }
    }
    return 0;
}

想要进入循环,你要先输入n呀

把 gets(str1); 改成 scanf("%s", str1);
下面的gets也都改下

错误修改如下,功能上还需完善,供参考:

#include<stdio.h>
#include<string.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    getchar();    //修改
    char str1[1000];
    gets(str1);
    while (n--)//n组测试
    {
        int m = 0;
        scanf("%d", &m);
        getchar();
        switch (m)//后接插入
        {
        case 1://if (m == 1) //修改
            {
                char str2[1000] = { '\0' };
                gets(str2);
                strcat(str1, str2);
                puts(str1);
            }
            break;           //修改
        case 2://else if (m == 2)//截取a,b的字符串  //修改
            {
                int a, b;
                scanf("%d%d", &a, &b);
                getchar();            //修改
                char temp2[1000] = { '\0' };
                for (int i = a; i < a + b; i++) //修改
                    temp2[i - a] = str1[i];
                //char str1[1000] = { '\0' };   //修改
                strcpy(str1, temp2);
                puts(str1);
            }
            break;           //修改
        case 3:    //else if (m == 3)//插入片段在文章第a个字符前面插入   //修改
            {
                int a = 0;
                scanf("%d", &a);
                getchar();           //修改
                char str3[1000] = { '\0' };
                gets(str3);
                int len_str1 = strlen(str1);
                int len_str3 = strlen(str3);
                char temp3[1000] = { '\0' };
                for (int i = 0; i < a - 1; i++)
                {
                    temp3[i] = str1[i];
                }
                strcat(temp3, str3);
                for (int i = a + len_str3 - 2; i < len_str3 + len_str1; i++)
                {
                    temp3[i] = str1[i - len_str3 + 2];
                }
                puts(str1);
            }
            break;         //修改
        case 4: //else if (m == 4)//查找   //修改
            {
                char str4[1000] = { '\0' };
                gets(str4);
                char* ret = strstr(str1, str4);
                printf("%s", ret);
            }
            break;         //修改
        }
    }
    return 0;
}