2015-05-20 19 views
2

我写一个简单的代码来打印文件到标准输出的内容。合并龟etc,并在的putChar while循环

当我使用这个:

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. 

那么为什么它不起作用?

+2

你怎么看'的putchar(EOF)'呢? – immibis

+0

我认为它可能应该评估为'EOF' – Chaker

+1

但是*为什么*你想写'EOF'到输出?无论如何,'EOF'不是'unsigned char',所以它不起作用。 –

回答

1

getchar返回以下中的一个:

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

因此,getchar通常可以返回(未256)值之一。如果试图(通过调用putchar例如)到值转换直奔charunsigned char,你会失去EOF信息。

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