免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1751 | 回复: 6
打印 上一主题 下一主题

[C] 大虾帮虾小弟啊!关于文件读写操作的。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-22 17:01 |只看该作者 |倒序浏览
原先写了一个文件写入数据的程序,写入数据的格式:
303
304
306
301
301
。。。
现在想从这个文件读取出这些数据放到一个数组里面,并统计读了多少个数据,
用不带缓存的I/O操作能实现这样么?
可以的话大虾给个例子看看~~~

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2008-08-22 17:11 |只看该作者

回复 #1 naisload 的帖子

如果每行都是一个整数,可以使用fscanf

论坛徽章:
0
3 [报告]
发表于 2008-08-22 17:20 |只看该作者
int main(void)
{
        int fd,i,sum=0;
        char ss[150];
        memset (ss,0,sizeof(ss));
        if((fd = open("data.c",O_CREAT | O_TRUNC | O_RDWR,0666))<0)
        {
                perror("open:");
                exit(1);
        }
        else
                printf("open file: data.c %d\n",fd);
        while(!feof(fd))
        {
        fscanf(fd,"%c",&ss[sum]);
        sum++;
        }
        for(i=0;i<sum;i++)
        {
        printf("%c",ss);
        }
        printf("\nNumber is %d\n",sum);
        return 0;
}
用了fscanf但编译时会提示警告
warning: passing arg 1 of `feof' makes pointer from integer without a cast
warning: passing arg 1 of `fscanf' makes pointer from integer without
然后执行就出现段错误。错在那里啊这个程序

论坛徽章:
0
4 [报告]
发表于 2008-08-22 17:20 |只看该作者

回复 #1 naisload 的帖子

不要使用标准I/O函数,因为用标准I/O函数读取文件的话,比如:
char  recvline[MAXLINE];
FILE *fp;
fp = fopen(fd, "r");
while(fgets(recvline, MAXLINE, fp) != NULL){
   .............
}
读入的数据并不是首先被送到recvline[]中,而是先存储在与fd相关联的标准I/O流缓冲区中,
等到缓冲区满的时候在输出到recvline[]中.
当然也可以用,记得没读入一次的话,fflush(fp)一下标准I/O流.
或者使用setbuf系列函数将标准I/O设置成不带缓冲的形式.
或者使用read()系列函数,fgets函数的出现也是为了减少read系统调用的次数,有那么点"预读"的意思,我自己理解的,不一定对.

论坛徽章:
0
5 [报告]
发表于 2008-08-22 19:40 |只看该作者
原帖由 naisload 于 2008-8-22 17:20 发表
int main(void)
{
        int fd,i,sum=0;
        char ss[150];
        memset (ss,0,sizeof(ss));
        if((fd = open("data.c",O_CREAT | O_TRUNC | O_RDWR,0666))

先看看feof和fscanf的原型吧!

论坛徽章:
0
6 [报告]
发表于 2008-08-22 20:29 |只看该作者
看了~一个是文件指针一个是文件描述符的,参数不一样
搞不通
那大虾有什么办法实现这样的数据读取啊
现在弄到头都痛了..............

论坛徽章:
0
7 [报告]
发表于 2008-08-23 00:03 |只看该作者
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

void main()
{
    vector<int> vecTarget;
    string strFilename = "test.txt";
    ifstream ifsFile(strFilename.c_str());

    string strLine;
    int iTemp;
    while(getline(ifsFile, strLine))
    {
        iTemp = atoi(strLine.c_str());
        vecTarget.push_back(iTemp);
    }

    cout << vecTarget.size() << endl;
    return;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP