在 while 循环中合并 fgetc 和 putchar
Merging fgetc and putchar in while loop
我正在编写一个简单的代码来将文件的内容打印到标准输出。
当我使用它时:
while((c=fgetc(fp))!=EOF)putchar(c);
它可以正常工作,但我想合并 putchar
和 fgetc
。所以我写了
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)值之一。如果您尝试将该值直接转换为 char
或 unsigned char
(例如通过调用 putchar
),您将丢失 EOF
信息。
因此,您需要将 getchar
的 return 值存储到 int
中,然后 将其转换为 unsigned char
或 char
.
我正在编写一个简单的代码来将文件的内容打印到标准输出。
当我使用它时:
while((c=fgetc(fp))!=EOF)putchar(c);
它可以正常工作,但我想合并 putchar
和 fgetc
。所以我写了
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.
那么为什么它不起作用?
getchar
returns 以下之一:
- 一个字符,表示为
unsigned char
值(例如通常介于 0 和 255 之间,包括这些值),转换为int
。因此,通常有 256 个(UCHAR_MAX+1
,技术上)值中的一个属于此类别。 - 一个非字符,
EOF
,具有负值,通常为 -1。
因此,getchar
通常可以 return 257(不是 256)值之一。如果您尝试将该值直接转换为 char
或 unsigned char
(例如通过调用 putchar
),您将丢失 EOF
信息。
因此,您需要将 getchar
的 return 值存储到 int
中,然后 将其转换为 unsigned char
或 char
.