为什么 C 程序(删除一行)会删除我的 .txt 文件的第一个字符?

Why does C program(to delete a line) delete the first character of my .txt file?

我在 Internet 上找到了一个代码,用于删除 .txt 文件中的特定行。问题是它还会删除文件的第一个字符。例如:txt文件中的内容-

测试线1

测试线2

测试线3

测试线4

删除第二行后的内容-

第一行

测试线3

测试线4

可以从网站上找到代码here

密码是:

/*
 * C Program Delete a specific Line from a Text File
 */

#include <stdio.h>

int main()

{

    FILE *fp1, *fp2;

    char filename[100];
    char filename2[100];

    char ch;

    int delete_line, temp = 1;



    printf("Enter file name: ");

    scanf("%s", filename);
    sprintf(filename2, "%s.txt", filename);

    //open file in read mode

    fp1 = fopen(filename2, "r");

    ch = getc(fp1);

    while (ch != EOF)

    {

        printf("%c", ch);

        ch = getc(fp1);

    }

    //rewind

    rewind(fp1);

    printf(" \n Enter line number of the line to be deleted:");

    scanf("%d", &delete_line);

    //open new file in write mode

    fp2 = fopen("replica.c", "w");

    ch = getc(fp1);

    while (ch != EOF)

    {

        ch = getc(fp1);

        if (ch == '\n')

            temp++;

        //except the line to be deleted

        if (temp != delete_line)

        {

            //copy all lines in file replica.c

            putc(ch, fp2);

        }

    }

    fclose(fp1);

    fclose(fp2);

    remove(filename2);

    //rename the file replica.c to original name

    rename("replica.c", filename2);

    printf("\n The contents of file after being modified are as follows:\n");

    fp1 = fopen(filename2, "r");

    ch = getc(fp1);

    while (ch != EOF)

    {

        printf("%c", ch);

        ch = getc(fp1);

    }

    fclose(fp1);

    return 0;

}

您在第二个循环中调用了 getc() 两次,因此您评估的第一个字符是文件中的第二个字符。
您只需在循环结束时调用 getc() ,如下所示:

ch = getc(fp1);

while (ch != EOF)

{

    if (ch == '\n')

        temp++;

    //except the line to be deleted

    if (temp != delete_line)

    {

        //copy all lines in file replica.c

        putc(ch, fp2);

    }

    ch = getc(fp1);

}