【发布时间】:2020-06-08 06:54:29
【问题描述】:
ch = getc(lname);
while (ch != EOF)
{
ch = getc(lname);
if (ch == '\n')
temp++;
//except the line to be deleted
if (temp != delete_line)
{
//copy all lines in file replica.c
putc(ch, rep);
}
}
我有一个文件,其中包含以下数据
Aryan Verma
Vinayak Sharma
Dev Deol
Ameesh Deol
上面的代码基本上通过将行值放在delete_line中来跳过我想要的数据行。 这里, temp 被初始化为 1。现在的问题是,这段代码跳过了第一个字符,在这种情况下是“A”,并在文件末尾放置了一个特殊的字符“ÿ”。 例如,delete_line=3
ryan Verma
Vinayak Sharma
Ameesh Deol
ÿ
另外,如果 delete_line 初始化为 1,它会跳过文件中的整行,例如:
Vinayak Sharma
Dev Deol
Ameesh Deol
ÿ
请告诉我是否有办法从文件的第一行写入,即使 delete_line 已初始化为 1。
【问题讨论】:
-
您在循环外调用
getc,然后立即在循环内使用getc将其丢弃。这就是缺少第一个字符的原因。 -
您检查
EOF在将字符写入文件之后。这就是最后一个字符无效的原因。 -
是
ch还是int?如果不是,则比较ch != EOF没有意义。 -
另外
EOF不是一个字符:它是一个信号。收到EOF信号后,您不应再阅读更多字符 -
请提供minimal reproducible example 作为解决方案代码提案的基础。
标签: c file-handling filehandle