避免在文件末尾添加新行

Avoiding adding a new line at the end of file

给定从标准输入读取的代码



    int main() {
         int c;
         while ((c = getchar()) != EOF) {
              fprintf(stdout, "%c", c);
         }
    }

此代码适用于读取包含多行的 stdin 中的所有内容。但它会在文件末尾添加一个新行。我如何修改上面的代码,以防止在 stdin 的最后一行添加额外的新行 \nstdin的例子如下。


hello world!!!
how is going today?
this is the last line in stdin

正如@NateEldredge 以友好的方式所说,从最后一行中删除尾随 '\n' 是愚蠢的。按照惯例,在类 UNIX 系统上,文本文件中的每一行都必须以 '\n' 结尾。但是如果你真的想删除最后一个换行符,也许是为了与一些较小的 OS 兼容,你必须延迟打印字符,直到你知道下一个读取是否返回 EOF,或者不:

#include <stdio.h>

int main(void)
{
  int c = getchar();
  int peek_c;
  if (c != EOF)
    {
      /* Print out everything except the last char */
      while ((peek_c = getchar()) != EOF)
        {
          fprintf(stdout, "%c", c);
          c = peek_c; 
        }
      /* If the last char was not '\n', we print it
         (We only want to strip the last char if it is a newline)  */
      if (c != '\n')
         fprintf(stdout, "%c", c);
    } 
}