【发布时间】:2021-04-09 21:39:23
【问题描述】:
我在 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结果被丢弃了。