2

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

当我使用这个:

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.

那么为什么它不起作用呢?

4

1 回答 1

1

getchar返回以下之一:

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

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

出于这个原因,您需要将返回值存储getchar到 an中int ,然后再将其转换为unsigned charor char

于 2015-05-20T23:12:34.253 回答