调用显示函数后循环 运行 无限时间

loop running infinite time after calling display function

do
{
    printf("1 :Enter Company Deatils\n");
    printf("2 :Display stoke Deatils\n");
    printf("0 :Exit\n");
    printf("\nEnter num: ");
    scanf("%d", &n);
    switch (n)
    {
        case 1:
            enter();
            break;
        case 2:
            display();
            break;
    }
}
while (n != 0);

当我输入 2 之后调用显示函数时 scanf() 不接受任何输入并且 运行 无限循环。

void display_d(){
    point c1;
    FILE *fptr;
    fptr = fopen("company_det.txt","r");
    while(fread(&c1,sizeof(point),1,fptr)){
        printf("\n%s %s %d\n",c1.company_name,c1.bla.date,c1.bla.price);
    }
    fclose(stdin);
}

这是我的展示功能

函数 display_d() 关闭 stdin。当函数 returns 时,scanf 将尝试使用 stdin 读取另一个数字。这是未定义的行为 (see answers here)。

您可能打算关闭文件而不是 stdin

此外,应检查 fopen 的 return 值。如果 fopen 打开文件失败,它将是 NULL