跃2.0 2018-02-20 13:20 采纳率: 40%
浏览 2393
已采纳

fscanf 问题,不能正确输出

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 }
不知道哪里错了,,,,输出有问题,可以写进文件,但是输出到屏幕上不行是需要再打开一次么

  • 写回答

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,表示程序执行成功
    }
    
    

    好了,好好理解我的注释,写了好久,希望能够对你有所帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包