首页 > 解决方案 > Switch Case 在 C 中由自身触发

问题描述

我有一个文件 student.txt 它的内容像

Name RollNo Address ...\n
Name RollNo Address ...\n

我已经编写了一个函数来在它的菜单驱动的文件中搜索名称,就像

 std student;
 FILE *file = NULL;
 int choice;
 char name[20];
 while (1)
    {
        printf("Enter the choice\n1.Insert\t2.Append\t3.Search\t4.Display: ");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            //insertion
            break;
        case 2:
            // append 
            break;
        case 3:
            printf("Enter the student name to be searched: ");
            scanf("%d", &name);
            search(name, &file);
            break;
        case 4:
            // display
            break;
        default:
            exit(0);
            break;
        }
    }
    return 0;

搜索功能是

void search(char ele[], FILE **fileptr)
{
    *fileptr = freopen("student.txt", "r", *fileptr);
    char line[100];
    while (fgets(line, 100, *fileptr) != NULL)
    {
        if (strstr(line, ele) != NULL)
        {
            getchar();
            printf("Congrats !!\n");
            return;
        }
    }
    printf("not found\n");
    fclose(*fileptr);
}

但是当我运行它时,虽然文件名与文件名匹配,但它会进入无限循环并执行显示功能并无限触发搜索功能本身

标签: cfileswitch-statementinfinite-loop

解决方案


当没有使用正确的格式说明符正确接收数据时,就会发生这种情况。

case 3, 在scanf函数中,使用格式说明符

%s

代替

%d

这将停止无限循环。


推荐阅读