为什么 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);
}
我在 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);
}