c - 文件操作中输出未正确显示

标签 c file

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

#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/

相关文章:

c - 如何在 C 中使用 scanf() 读取一行?

c - OpenMP 并在 DFS 树的特定级别打开并行化

c - UDP端口访问

java.io.FileNotFoundException,为什么?

java - 如何查找和检索具有可更改日期后缀的完整文件名

c - 什么情况下我们使用堆排序?

c - 为什么调用函数会修改参数中未给出的指向函数的指针数组的值?

java - 创建文件前,删除前一天的文件

python mechanize - 从触发文件下载的 aspnetForm submitControl 检索文件

python - 如何从Python中的两个文件中找到共同的模式集?