c - 使用 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;
}
解决方案
如果我修改您的程序以考虑到天气风向标的评论,并且我用 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
推荐阅读
- vue.js - 在 Vue.js 中从父组件向动态组件传递数据
- mysql - 尝试使用 mysql 秘密引擎插件设置安装在 GCP 上的 Vault 时出错
- intellij-idea - IntelliJ .idea 文件夹是本地更改的一部分,尽管它是在 .gitignore 中定义的
- http-headers - FastCGI+lighttpd+C++:如何访问代码中的 HTTP 标头?
- mysql - MySQL CURSOR 循环在过程中添加了一个额外的循环
- bash - 如何在 bash 脚本中的 source env shell 之后运行命令
- javascript - JsFiddle:库“加载类型”是指库还是我的代码?
- php - 学说:从数据库中生成实体
- c# - 如何在 C# 中模拟文件上传?
- javascript - 在javascript中将函数作为动态函数调用为数组值