1 #include
2 #include
3
4 int main() {
5 char *s="helloworld";
6 char t[20];
7 FILE *a;
8 a=fopen("e:\Helloworld.txt","a+");
9 fprintf(a,"%s",s);
10 //fscanf(a,"%s",s);
11 fgets(t,sizeof(s),a);
12 printf("%s",t);
13
14
15 }
不知道哪里错了,,,,输出有问题,可以写进文件,但是输出到屏幕上不行是需要再打开一次么
fscanf 问题,不能正确输出
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
12条回答 默认 最新
- 王廷云的博客 2018-03-19 07:33关注
问题出现在你没有理解文件操作的原理!
打开一个文件会有一个文件指针指向该文件,该指针记录了你读写文件时的位置,读或者写都共用同一文件指针。
你第一次打开文件后,文件指针指向了文件的开头,然后你往文件中写入了"helloworld"10个字节的字符串,这时文件指针指向了文件的末尾,
接着你想要从刚写完的文件中读取它的值,但文件指针指向的时末尾,所以读取时什么也没有读到,这就是为什么你打印输出时没有显示的原因!
解决问题:
写完文件时,把文件指针回到开头,这时就可以读取刚才写入的内容了!我把刚才写的原理转换代码给你看看:
#include <stdio.h> #include <string.h> int main(void) { char *s="helloworld"; char t[20]; FILE *a; a = fopen("e:\Helloworld.txt","a+"); fprintf(a, "%s", s); /* 这里你对文件写入了"helloworld"10个字符 */ /* 此时文件指针指在文件末尾即"helloworld"后面 * 可以使用函数ftell()来获取文件指针的位置 */ int ret; ret = ftell(a); printf("文件位置:%d\n", ret); // 可以知道返回值为10,即写入字符串的长度 /* 想要读取刚才写入的字符串,此时需要把文件指针回到开头, * 使用函数rewind()把指针回到开头 */ rewind(a); /* 再读取文件指针的位置 */ ret = ftell(a); printf("文件位置:%d\n", ret); // 这时可以发现返回值为0,即回到了文件开头 /* 接下来就是你想要读取刚才写入内容的步骤了 */ /* 这里提个醒,你的代码写错了,你的源代码为 * fgets(t,sizeof(s),a); * 首先s为指针,使用sizeof(s)获取的时指针s的大小,这里 * 指针大小为4个字节,所以如果这样读取的话,只能读取前4个字符 * 正确的读取方式是 strlen(s) 这样获取的才是字符串s的长度 */ fgets(t, strlen(s)+1, a); // strlen(s)加1是因为fgets会自动读取少一个字符 printf("%s\n", t); fclose(a); // 有打开文件就有关闭文件,这是个好习惯 return 0; // main函数应该最好返回0,表示程序执行成功 }
好了,好好理解我的注释,写了好久,希望能够对你有所帮助!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 5无用
悬赏问题
- ¥15 matlab图像高斯低通滤波
- ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
- ¥15 钢筋实图交点识别,机器视觉代码
- ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
- ¥50 400g qsfp 光模块iphy方案
- ¥15 两块ADC0804用proteus仿真时,出现异常
- ¥15 关于风控系统,如何去选择
- ¥15 这款软件是什么?需要能满足我的需求
- ¥15 SpringSecurityOauth2登陆前后request不一致
- ¥15 禅道二次开发编辑版本,上传不了发行包