首页 > 解决方案 > 使用 fgets 和 puts 读取和打印文件不起作用

问题描述

我写了下面这段代码来读取一个文本文件,上面写着:这是最好的时代,这是最坏的时代,这是智慧的时代。

当我运行我的代码时,似乎什么都没有发生。您可以在我的代码中发现任何可能导致此问题的内容吗?(解决方案构建也没有错误或警告)。谢谢 :)

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
FILE * fPointer;
fPointer = fopen("exercise1.txt","r");
char singleline[150];

while (!feof(fPointer))
{
    fgets(singleline, 150, fPointer);
    puts(singleline);
}

fclose(fPointer);
return 0;

}

标签: cfilefgetsputs

解决方案


如果我修改您的程序以考虑到天气风向标的评论,并且我用 fputs 替换您的puts使 \n 加倍(fgets不会删除 \n 并puts添加一个 \n):

#include<stdio.h>
#include<stdlib.h>

int main()
{
  FILE * fPointer = fopen("exercise1.txt","r");

  if (fPointer == NULL)
    puts("cannot open exercise1.txt");
  else {
    char singleline[150];

    while (fgets(singleline, sizeof(singleline), fPointer))
      fputs(singleline, stdout);

    fclose(fPointer);
  }

  return 0;
}

编译和执行:

/tmp % gcc -pedantic -Wextra c.c
/tmp % cp c.c exercise1.txt
/tmp % ./a.out
#include<stdio.h>
#include<stdlib.h>

int main()
{
  FILE * fPointer = fopen("exercise1.txt","r");

  if (fPointer == NULL)
    puts("cannot open exercise1.txt");
  else {
    char singleline[150];

    while (fgets(singleline, sizeof(singleline), fPointer))
      fputs(singleline, stdout);

    fclose(fPointer);
  }

  return 0;
}
/tmp % \rm exercise1.txt 
/tmp % ./a.out
cannot open exercise1.txt

推荐阅读