我有这段代码
<....
Gets input from input.txt, which contains several lines
the code checks each lines, determining the usefulness by calculating BR and BL,
the 2 INT variables to detect whether the text is useful or not
....>
if (BR > BL)
//if the BR in a line is greater than the BL, I want to copy that line (from input.txt)
//and paste it to output.txt.
//So then the output.txt will only contains lines that has BR > BL
{
wr_file=fopen("output.txt", "w");
fprintf (wr_file, "%s \n", text);
}
程序可以正确检测每行的BR和BL。但是使用最后一个代码,我似乎无法正确地将有用的行从input.txt复制到output.txt
让我们说这是我的input.txt:
1. carrot cabbage tomato
2. potato rice
3. cabbage eggplant
据说,第1和第3行是有用的。所以output.txt应该是这样的:
1. carrot cabbage tomato
3. cabbage eggplant
但它看起来像这样:
3. cabbage eggplantomato
正如你所看到的,它确实复制了第1行,但是当它必须写第3行时,它不会在新行中写入,而是篡改第1行。
请帮助,我该如何正确复制这些行。
答案 0 :(得分:1)
没有MCVE,就无法正常调试,但我认为,问题在于,您正在调用
wr_file=fopen("output.txt", "w");
次数,这就是你的输出是覆盖的原因,只保留了最后一次写入。 fopen()
目标文件只有一次,并保持fwrite()
循环。
此外,当用作字符串 NULL
NUL
从输入文件中终止输入[text
] > [例如:传递给fwrite()
]。
答案 1 :(得分:0)
看起来错误在读取文件的代码中。当您将一行读入字符串时,应添加\0
- 字符以终止该字符串。
答案 2 :(得分:0)
输出文件正在&#34; w&#34;模式,即写模式,所以当你写一行时它会覆盖文件内容。 我建议你使用
wr_file=fopen("output.txt", "w");
用于写第一行和
wr_file=fopen("output.txt", "a");
用于写剩余的行。
更新1:
否则尝试将您要写入的所有数据添加到字符串(char []),然后将该字符串写入相应的文件。减少访问文件的次数。