标准C语言中如何一次读取某文件中的多行数据?(要整行读取)

ql_mf 2004-07-29 01:32:48
如果我要读取的文件中有30行,现在我想一次读取5整行,把每行的数据存到数组里,如何实现?
...全文
2009 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ql_mf 2004-07-29
  • 打赏
  • 举报
回复
能给一个打开二进制文件,并读取64K的例子吗?
boyszz 2004-07-29
  • 打赏
  • 举报
回复
二进制方式打开文件,每次读64K,然后自己找分行符

可行
ql_mf 2004-07-29
  • 打赏
  • 举报
回复
improgrammer(无忌):
我对这些概念确实不太了解,如果你了解,请指教。
没必要发这种:“你可知道什么叫做I/O资源?”的回帖,不想回答就别回答,不用在这里说风凉话。
improgrammer 2004-07-29
  • 打赏
  • 举报
回复
“I/O资源占得太多了”!
你可知道什么叫做I/O资源?
loverP 2004-07-29
  • 打赏
  • 举报
回复
举个例子:
FILE *f; /* 你要打开的文件 */
static char buf[1024]; /* 你自己的缓冲区 */
setvbuf(f, buf, _IOFBF, 1024);
这时,你的f文件就有了1K的缓存了。注意buf一定要使全局变量会静态变量,或者在程序结束前你要手动调用fflush(),否则会出现一些问题。
另外,setbuf()是setvbuf()的一个简化版,你可以写
setbuf(f, buf);
但这个函数所能设置的缓冲区大小依赖于BUFSIZ宏所制定的大小,如果改变这个宏,有可能对其它文件产生不利的影响,所以不如自己调用setvbuf()。

参考《C语言参考手册》
loverP 2004-07-29
  • 打赏
  • 举报
回复
对的,如果你担心系统提供的文件缓存不够多,你还可以自己分配一块大的内存作为缓存,然后用setbuf()函数(<stdio.h>)改变文件操作的缓存区。
EternalBlue 2004-07-29
  • 打赏
  • 举报
回复
一次读一行和一次读多行本质上没什么区别
都是先将文件内容放到一个缓冲中
然后找换行符,再将该行的信息读出

就如pacman2000(pacman)(影子传说) 所说,fgets等是有缓冲的,因此并不会占用太多I/O
pacman2000 2004-07-29
  • 打赏
  • 举报
回复 1
不用操心一次读多少,fgets这些系统调用都是有系统缓冲的,并不是读一行就去读一下文件。系统也是一次读一块,然后送给fgets的,不够读才去磁盘上读。
ql_mf 2004-07-29
  • 打赏
  • 举报
回复
看来好像是不行,我这里每行的长度都不一样,有可能会把某行取过来一半。
herryhuang 2004-07-29
  • 打赏
  • 举报
回复
二进制方式打开文件,每次读64K,然后自己找分行符
peter9606 2004-07-29
  • 打赏
  • 举报
回复
如果楼主这样的话I/O资源恐怕就没有了 一次1w条? 不知道一条有多大 *—……%¥#·
ql_mf 2004-07-29
  • 打赏
  • 举报
回复
当然有区别,我现在要处理的文件有100万条记录,要是每条都读一次的话,I/O资源占得太多了。
我需要一次读1万条,进行处理。
abitz 2004-07-29
  • 打赏
  • 举报
回复
一次读取5整行 和 分5次,一次读一行有区别吗?
使用fgets(char * buf, int max, FILE *fp)读取以文本模式打开的文件中以"\n"结尾的一行。
kaphoon 2004-07-29
  • 打赏
  • 举报
回复
只能自己写
标准最多读一行
peter9606 2004-07-29
  • 打赏
  • 举报
回复
错了 fgets() ..
peter9606 2004-07-29
  • 打赏
  • 举报
回复
gets()一次读取一行
前 言 visual basic继承了basic语言易学易用的特点,特别适合于初学者学习windows系统编程。随着21世纪信息社会的到来,计算机在人们的工作和生活的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。于是我们小组着手设计开始一个这样的游戏软件。通过这学期来Visual Basic的学习,我初步掌握了Visual Basic语言的最基本的知识,于是在化希耀张兵等老师的指导下动手用Visual Basic编写俄罗斯方块游戏。 无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。《俄罗斯方块》举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似《俄罗斯方块》触动了我们某些内在的感官,使得哪怕是我们当最杂乱无章的人也要把事情整理妥当。 在曾经发布过的所有游戏,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。某些批评家也许会声称,《俄罗斯方块》要比过去二十年间出现的任何东西都要浪费人们的时间。至于我们,则要欣然提名它为GameSpot评选出的历史上最伟大游戏之一。 为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用VB语言开发一个经典的俄罗斯方块游戏。 工程概况 1.1 项目名称 俄罗斯方块游戏 1.2 设计平台 VB 全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。 Vb是microsoft公司于1991年退出的windows应用程序开发工具visual意思是“可视化的”。在它刚推出来时,自身还存在一些缺陷,功能也相对少一些。但是经过多年的开发研究。最近microsoft公司又推出了VB6.0版本 VB6.0运行环境:硬件,要求486以上的处理器、16MB以上内存,50MB 以上的硬盘,cd-rom驱动器,鼠标。软件:要求windows 95以上版本。 1.3程序设计思想 游戏是用来给大家娱乐的,所以要能在使用的过程给大家带来快乐,消除大家的疲劳,所以我们在游戏添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。 从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我们在设计在一个图片框构造了一个4*4的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,因此我们总共设计了7造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个预览窗体提前展示形状供用户参考,然后将展示的形状复制到游戏窗体进行摆放,在游戏窗体用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,其,方块向下的速度是有时钟控件控制的,在游戏,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用if 语句对分数判断,达到一定的积分就可以升级到下一个档次。 俄罗斯方块游戏设计的主要步骤为以下10个方面: (1)游戏界面的设计。 (2)俄罗斯方块的造型。 (3)俄罗斯方块的旋转。 (4)俄罗斯方块的运动情况(包括向左,向右和向下)。 (5)俄罗斯方块的自动消行功能。 (6)游戏级别的自由选择。 (7)游戏速度的自由选择。 (8)游戏得分的计算。 (9)游戏菜单选项的设计及功能实现。 (10)游戏的背景音乐。 1.4运用的控件和主要对象 我们在设计过程主要用到的控件有:command控件,image控件,picture控件,label控件,timer控件,text控件,windows media player控件等等。 1.5主要实现的功能 我们开发的俄罗斯方块游戏,主要实现了以下几种功能: 1.可以灵活控制方块在图形框运动。 2.游戏过程方块可以自由旋转。 3.当某一行的方块排列满时,将自动将这一行方块消除,然后将上面所有方块向下移动,可以支持连续消行。 4.游戏前可以选择游戏的速度和游戏的等级,游戏速度既为方块下落速度,游戏等级为初始游戏时在基层随机生成一定行数的无规律方块,生成的行数由你来选择,每行至少产生5个以上的无规律方块,这样增加了游戏难度,对于游戏高手来说,无疑不是一个新的挑战。 5.游戏的得分支持积分,并且按照公式: 得分 = 原来分数+ 100 * (2 ^ 同时消除的行数-1) 这样,你同一时间消除

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧