c - 在 C 中读取文本文件并将其内容打印到屏幕

标签 c file-io

我正在编写一个读取给定文件并将其内容打印到屏幕的函数。目前我有以下内容:

int textdump(const char *filename)
{
  int n = 0;
  char ch;
  FILE *fileHandle;
  fileHandle = fopen(filename, "r");
  if ((fileHandle = fopen(filename, "r")) == NULL)
  {
    return -1;
    fclose(fileHandle);
  }
  while ((ch = fgetc(fileHandle) != EOF) )
  {
    printf("%c", ch);
    n++;
  }

  fclose(fileHandle);
  if (fclose(fileHandle) == EOF)
  {
    return EXIT_FAILURE;
  }
  return n;
}

函数成功读取文本文件,并正确返回每个文件的字符数。但后来我尝试打印字符,现在我什至无法运行程序 - 我得到“运行失败 - 文档不能为空,无法解析测试结果”。

最佳答案

总结上面代码的问题,

  • 在您的代码中,为什么要执行两次 fopen()/fclose()?摆脱那部分。 --------------(1)
  • 您不需要 fclose() 尚未打开的内容。 ----------------------------------------------(2)
  • return 之后的所有语句均无效。 ---------------------------------------------- ----(3)
  • 照顾operator precedence在使用 fgetc() 时。 ----------------------------------------(4)
  • fgetc()返回 int 值。相应地改变。 ----------------------------------------------(5)

所以,你的代码看起来像

int textdump(const char *filename)
{
int n = 0;
int ch = 0;
FILE *fileHandle = NULL;
//fileHandle = fopen(filename, "r");  //not reqd  --- (1)
    if ((fileHandle = fopen(filename, "r")) == NULL){
    return -1;
    //fclose(fileHandle); // not reqd  --- (2), (3)
}
while ( (ch = fgetc(fileHandle)) != EOF ){   //notice here   -- (4), (5)
  printf("%c", ch);
  n++;
}

fclose(fileHandle);
/*
if(fclose(fileHandle) == EOF){ -- (1)
    return EXIT_FAILURE;
 }*/
 return n;
 }

关于c - 在 C 中读取文本文件并将其内容打印到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745907/

相关文章:

c++ - 为什么标准字符串函数比我的自定义字符串函数更快?

c - Unresolved inclusion 在 JNI 中的 java header 中

python - 随着时间的推移跟踪文件

c - CLion IDE 中的文件 I/O

Python:打开(文件名, 'w')用于不存在的文件

c - 如何在 C 中指定范围?

c - 通过opengl渲染每像素图像1位

c - 矢量化代码随机减速的原因

java - 我的代码在某个时刻失败了。 Java文件IO

c++ - 如何覆盖当前文件?