删除文件末尾的空新行

我有一个文件存储来自用户输入的字符串(stdin)

但是有两种情况

如果我正常阅读,由于用户引入的最后一个字符串中的换行符,我的文件末尾会有一个空行。

如果我从输入字符串中删除\n ,该文件将所有字符串存储在同一行中,这是不需要的。

如何从文件末尾删除该换行符?

如果需要,我可以编辑并提供一些代码。

编辑:让我们说我已经拥有的文件的最后一行是“卡片”

当光标在“卡片”前面时,如果我按向下箭头它不会继续到下一行,而在这种情况下它可以发生一次。

为了让我的代码完美运行,我不能让这种情况发生,

这是我的一个例子:

 f=fopen(somefile, "w"); do { fgets(hobby, 50, stdin); fprintf(f, "%s", hobby) } while(strcmp(hobby,"\n") != 0); 

文件末尾的换行符1是最后一行的一部分 。 删除它是可能的,但使最后一行不完整,这将打破许多程序。 例如,在此文件末尾连接另一个文件将导致最后一行与连接文件的第一行合并。

Yuri Laguardia评论说,如果你以后在追加模式下重新打开这个文件来写更多行,那么添加的第一个将在最后一个不完整行的末尾连接起来。 可能不是预期的行为。

如果您不希望文件包含空行,请在将行写入文件之前检查用户输入:

 void input_file_contents(FILE *fp) { char userinput[80]; printf("enter file contents:\n"); while (fgets(userinput, sizeof userinput, stdin)) { if (*userinput != '\n') { fputs(userinput, fp); } } } 

编辑:

您的代码不会在正确的位置测试终止:您在测试之前写下空行。 不要使用do / while循环:

 f = fopen(somefile, "w"); if (f != NULL) { /* read lines until end of file or empty line */ while (fgets(hobby, 50, stdin) != NULL && *hobby != '\n') { fputs(hobby, f); } } 

1换行符实际上是旧系统上的一对字节