在 while 循环中合并 fgetc 和 putchar

Merging fgetc and putchar in while loop

我正在编写一个简单的代码来将文件的内容打印到标准输出。

当我使用它时:

while((c=fgetc(fp))!=EOF)putchar(c);

它可以正常工作,但我想合并 putcharfgetc。所以我写了

while(putchar(fgetc(fp))!=EOF);

不过好像不行。所以我检查 putchar

的 return 值
RETURN VALUE
       fputc(),  putc()  and  putchar()  return  the  character  written as an
       unsigned char cast to an int or EOF on error.

那么为什么它不起作用?

getchar returns 以下之一:

  • 一个字符,表示为 unsigned char 值(例如通常介于 0 和 255 之间,包括这些值),转换为 int。因此,通常有 256 个(UCHAR_MAX+1,技术上)值中的一个属于此类别。
  • 一个非字符,EOF,具有负值,通常为 -1。

因此,getchar 通常可以 return 257(不是 256)值之一。如果您尝试将该值直接转换为 charunsigned char(例如通过调用 putchar),您将丢失 EOF 信息。

因此,您需要将 getchar 的 return 值存储到 int 中,然后 将其转换为 unsigned charchar.