任何人都可以解释一下这段代码中的错误是什么。
#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下尝试过。但结果是一样的。
最佳答案
首先,c
应该是 int
,而不是 char
。 putc() 接受一个 int
,更重要的是,getc() 从流中读取下一个字符,并将其作为 unsigned char
转换为 int
,或文件末尾或错误时的 EOF。如果将其存储到 char
中,则 EOF
会丢失,因为 char
太窄并且无法表示它。
第二,这是错误的:
while ((c = getc(f1) != EOF))
你想要的是:
while ((c = getc(f1)) != EOF)
你放错了括号。
请记住,您需要更改 printf() 调用,因为 c
现在是 int
:
printf("%c", (char)c);
您需要显式转换,因为 printf() 是一个可变参数函数,因此编译器不执行自动类型转换。您需要使用可变参数函数手动进行转换。
关于c - 文件操作中输出未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068811/