将fgetc和putchar合并到while循环中

时间:2015-05-20 22:39:26

标签: c fgetc putchar

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

当我使用它时:

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

它的工作方式应该如此,但我想合并putcharfgetc。所以我写了

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

但它似乎不起作用。所以我检查putchar

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

那为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

getchar返回以下内容之一:

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

因此,getchar通常可以返回 257 (非256)值中的一个。如果您尝试将该值直接转换为charunsigned char(例如通过致电putchar),则您将丢失EOF信息。

出于这个原因,您需要将getchar的返回值存储到int 之前,然后将其转换为unsigned charchar