| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 472 人关注过本帖
标题:向文件写入\读取数据的问题
只看楼主 加入收藏
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:7 
向文件写入\读取数据的问题
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define MAX 40
int main(void)
{
    FILE *fp;
    char words[MAX];
    if((fp=fopen("gfile","a+"))==NULL)
    {
        fprintf(stdout,"Can't open \"words\"file.\n");
        exit(1);
    }
    puts("enter the words");
    while(gets(words)!=NULL&&words[0]!='\0')
    {    
        fprintf(fp,"%s",words);
    }
    puts("file contents");
    int t=0;
    rewind(fp);
    while((t=fscanf(fp,"%s",words))==1)
    {
        puts(words);
        printf("%d\n",t);
    }
    printf("%d\n",t);
    printf("%d\n",sizeof(words));    
    if(fclose(fp)!=0)
    {
        fprintf(stderr,"error\n");
    }
    return 0;
}
一段代码,功能是向文件添加单词
c primer上的
有两个问题:
1、为什么向文件写入50个字符时候就不能再写入了?
2、每次运行,最后的puts(words)都会把文件内的信息显示出来(包括上一次运行输入的数据),这句代码不应该是打印words这个数组内的数据吗?
2015-08-27 15:04
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
另外问下怎么发图片啊?难不成要把图片当成附件上传?
2015-08-27 15:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
你的程序,逻辑就不清晰。里面有fscanf("%s", words)读取数据的代码,肯定每次都把文件内容打印出来了。再加上你用"a+",那是不断往文件追加数据的,越加越长,又每次都把内容读到words字符串中,你定义的words[40]能容纳多长?

另:图片当附件发。

授人以渔,不授人以鱼。
2015-08-27 15:31
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
回复 3楼 TonyDeng
fprintf(fp,"%s",words)和fscanf(fp,"%s",words)
是不是可以分别理解成把words里的数据写到fp指向的文件里 和 把fp指向的文件里的数据写入words数组里。
2015-08-27 15:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
一个是按行读 一个是按行写

DO IT YOURSELF !
2015-08-27 15:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
文件读写跟控制台读写是一样的原理。

授人以渔,不授人以鱼。
2015-08-27 15:57
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
之前fprintf和fscanf的用法和原理没搞懂,谢谢TonyDeng大人和5L的大哥!!
2015-08-27 16:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你要明白,scanf()/printf()的函数,实质上就是fscanf()/fprintf(),祗不过是把文件流指针固定为stdin和stdout了,后两者都是FILE*类型。你看看stdio.h中scanf()/printf()函数的声明就知道了。

授人以渔,不授人以鱼。
2015-08-27 16:22
快速回复:向文件写入\读取数据的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016310 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved