0

任何人都可以解释这段代码中的错误是什么。

#include<stdio.h>
int main() {
  FILE *f1;
  char c;
  f1 = fopen("INPUT", "w");
  while((c=getchar()) != '/')
    putc(c, f1);
  fclose(f1);
  f1 = fopen ("INPUT", "r");
  while ((c = getc(f1) != EOF))
    printf("%c", c); 
  fclose(f1);
}

输出以无法检测的字体出现。我也在windows中试过。但同样的结果。

4

1 回答 1

2

首先,c应该是一个int,而不是一个char。putc() 接受一个int,更重要的是,getc() 从流中读取下一个字符,并将其作为转换返回unsigned char到一个int,或文件末尾的 EOF 或错误。如果将其存储到 achar中,则会EOF丢失,因为char太窄且无法表示。获取()

其次,这是错误的:

while ((c = getc(f1) != EOF))

你想要的是:

while ((c = getc(f1)) != EOF)

你放错括号了。

请记住,您需要更改 printf() 调用,因为c现在是int

printf("%c", (char)c);

您需要显式转换,因为 printf() 是一个可变参数函数,因此编译器不执行自动类型转换。您需要使用可变参数函数手动转换。

于 2013-02-25T14:12:16.077 回答