C 如何从文件中删除我不知道该行确切位置的行?

C 如何从文件中删除我不知道该行确切位置的行?,c,string,file,stdio,C,String,File,Stdio,你好。我的程序有点问题。该计划应根据会员选择的选项,向俱乐部添加会员或将其从俱乐部中删除。此人的信息将存储在一个文件中。但是,我的问题是,如果他们选择该选项,如何从文件中删除此人及其信息。案例2将处理程序的这一部分。我只提示他们在案例中输入自己的名字,因为我知道会进行一些比较。我非常感谢能帮我解决这个问题的人。提前谢谢。以下是程序代码: #include <stdio.h> #include <conio.h> #include <errno.h> int

你好。我的程序有点问题。该计划应根据会员选择的选项,向俱乐部添加会员或将其从俱乐部中删除。此人的信息将存储在一个文件中。但是,我的问题是,如果他们选择该选项,如何从文件中删除此人及其信息。案例2将处理程序的这一部分。我只提示他们在案例中输入自己的名字,因为我知道会进行一些比较。我非常感谢能帮我解决这个问题的人。提前谢谢。以下是程序代码:

#include <stdio.h>
#include <conio.h>
#include <errno.h>

int PrintMenu();
int PrintMenu(){
    printf ("=============================================\n");
    printf ("          4-H Membership Menu\n");
    printf ("=============================================\n\n");
    printf ("Choose which option you want to operate.\n");
    printf ("1. Become a member of the club.\n"); 
    printf ("2. Leave the club.");
    printf("\n\n");
    printf("=============================================\n\n");
}

int CaseFunc();
int CaseFunc(){ 
    FILE *clubFile;
    char *fname[28];
    char *lname[28];
    int age;
    int menuANS;
    char ans;
    char ans1;
    int x;


    printf("Enter your answer here: ");
    scanf(" %d", &menuANS);

    switch (menuANS){
    case 1:

        system("cls");
        printf ("Enter your first name: ");
        scanf ("%s", fname);
        printf("\n");
        printf ("Enter your last name: ");
        scanf ("%s", lname);
        printf("\n");
        printf ("Enter your age: ");
        scanf ("%d", &age);


        system("cls");
        Next:
        printf ("A memebership fee of $1000 is to be paid to become a member.\n");
        printf ("Do you want to continue signing up?\n");
        printf ("[y/n only]: ");
        scanf (" %c", &ans);
        system("cls");
        if (ans == 'y'){
            printf ("Are you sure? Information will be updated to the system.\n[Note: A fee of $1000 is to be paid.]\n");
            printf ("[y/n only]: ");
            scanf (" %c", &ans1);

            if (ans1 == 'y'){
                if ((clubFile = fopen("4-H Information.txt", "a+")) == NULL){   //If the file path is incorrect, an error message is displayed
                    fprintf(stderr, "Error while opening file  (%d: %s)\n",errno, strerror(errno)); //Error message that will be displayed if file path is incorrect
                return;
                }


                fprintf (clubFile, "First Name      Last Name       Age\n");
                fprintf (clubFile, "%s %s %d", fname,   lname,  age);               
                fclose(clubFile);
                printf("\n\n");
                printf ("*You are now a member of the 4-H society.*\n");

                }

            else if (ans1 == 'n'){
                system("cls");
                main();
            }   

        }
        else if (ans == 'n'){
            printf ("Are you sure? All your information will be lost.\n");
            printf ("[y/n only]: ");
            scanf(" %c", &ans1); 

                if (ans1 == 'y'){
                    system("cls");
                    main(); 
                }
                else if (ans1 == 'n'){
                    system("cls");
                    goto Next;
                }

        }

    break;

    case 2:
        printf("Enter your first name: ");
        scanf("%s", fname);
        printf("\n");
        printf("Enter your last name");
        scanf("%s", lname);

        break;

    default:
        printf ("Invalid entry of menu option.");
        break;
    }
}

int main (void){
PrintMenu();
CaseFunc();

getch();
return 0;
}

您不能从文件中删除任何内容,因为您需要用某些内容替换腾出的空间。正确的做法是有一个输出文件,您将复制输入文件中除删除文件外的所有数据,然后用输出文件替换输入文件;int打印菜单{/*函数*/}。非常彻底。是的,在定义之前的原型设计很有趣。你可以简单地映射错误,然后移动删除的部分。可能比打开第二个文件要快。或者……天哪,不可能……只需要使用真正的数据结构就可以了。