这段代码应该跳过一行文件,将其他所有内容写入不同的文件中,删除原始文件,并将不同的文件重命名为已删除的文件。这段代码的问题在于它在第一个文件之后不起作用,即第二个文件被删除,也没有使用跳过的文件行创建新文件。问题出在哪里?它是否必须与重命名删除功能有关?
FILE *lname
FILE *id
FILE *rep
lname = fopen("lname.txt", "r");
id = fopen("id.txt", "r");
rep = fopen("rep.txt", "w+");
char ch1,ch2;
int temp=1,delete_line=3; /*(delete_line is supposed to be taken as an input)*/
ch1 = getc(lname);
while (ch1 != EOF)
{
if (ch1 == 'n')
temp++;
if(delete_line==1) {
if (temp == 2 && ch1 == 'n')
ch1 = getc(lname);
}
if (temp != delete_line)
putc(ch1, rep);
ch1 = getc(lname);
}
fclose(lname);
fclose(rep);
remove("lname.txt");
rename("rep.txt","lname.txt");
rep = fopen("rep.txt", "w+");
ch2 = getc(id);
while (ch2 != EOF)
{
if (ch2 == 'n')
temp++;
//except the line to be deleted
if (temp == 2 && ch2 == 'n') //making sure to skip a blank line if delete_line=1
ch2 = getc(id);
if (temp != delete_line)
putc(ch2, rep);
ch2 = getc(id);
}
fclose(id);
fclose(rep);
remove("id.txt");
rename("rep.txt","id.txt");
ID 中的数据.txt
asd123
xcv1323
rijr123
eieir2334
数据在 lname.txt
Bipul Das
Star Lord
Tony Stark
Vin Diesel
行
ch1 = getc(lname);
将getc
的返回值从int
截断为char
。因此,while 循环条件
while (ch1 != EOF)
将永远为真,因为EOF
无法在char
中表示。
若要解决此问题,必须将ch1
声明为具有int
类型而不是char
。
关于:这段代码的问题在于它在第一个文件之后不起作用,即第二个文件被删除,也没有使用跳过的文件行创建新文件。 问题出在哪里?它是否必须与重命名删除功能有关?
原始文件:rep.txt
实际上正在被删除。
但是,此调用:
rep = fopen("rep.txt", "w+");
创建一个同名的空文件。