C - 如何在不篡改输出文本中的现有行的情况下编写新行?

时间:2014-11-12 09:47:20

标签: c text newline

我有这段代码

<....
 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行。

请帮助,我该如何正确复制这些行。

3 个答案:

答案 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 []),然后将该字符串写入相应的文件。减少访问文件的次数。