有人能解释一下这段代码中的错误吗。
#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);
}
输出的字体无法检测。我也试过窗户。但结果是一样的。
首先,c
应该是int
,而不是char
。putc((获取一个int
,更重要的是,getc((从流中读取下一个字符,并将其作为unsigned char
强制转换为int
,或文件结尾或错误时的EOF返回。如果将其存储到char
中,则EOF
会丢失,因为char
太窄,无法表示它。getc((
其次,这是错误的:
while ((c = getc(f1) != EOF))
你想要的是:
while ((c = getc(f1)) != EOF)
你把括号放错地方了。
请记住,您需要更改printf((调用,因为c
现在是int
:
printf("%c", (char)c);
您需要显式转换,因为printf((是一个可变函数,因此编译器不执行自动类型转换。您需要使用变差函数手动强制转换。