C语言磁盘文件读写,前99个输出是空,第100值才正确。求高手指点。

代码如下:如果把写文件的主要内容放在主函数中,输出就是对的;如果放到子函数中,只有最后一个值是对的,前面的99个是空值。不知道为什么写入不成功啊
void main()
{
int i;
FILE *fp;
ptW=T_Wmotor;
ptR=T_Rmotor;
for(i=0;i<100;i++)
{
T_Wmotor[i].id=i;
T_Wmotor[i].flag=0;
T_Wmotor[i].vv=i+(float)0.5;
T_Wmotor[i].aa=10;
}

// fp=fopen(SECTION1,"wb");

for(i=0;i<100;i++)
{
// fseek(fp,sizeof(MOTOR)*i,SEEK_SET);
// fwrite(ptW,sizeof(MOTOR),1,fp);
WriteSection(SECTION1, ptW, sizeof(MOTOR), i);
ptW++;
}
// fclose(fp);
ReadSection(SECTION1, 100, 10);
scanf("%d",&i);
}

void WriteSection(char *section, MOTOR *pt, int size, int offsetNum)
{
FILE *fp;
MOTOR *pt1;
pt1=pt;
long int offset;
int flag;

offset=size * offsetNum;
fp=fopen(section,"wb");
flag=fseek(fp,offset,0);
if(fwrite(pt,size,1,fp)!=1)
printf("file write error\n");
fclose(fp);
}

因为fopen wb建立文件的时候 , 会检查是否之前这个文件存在 如果存在 删除原来的建立一个新的 或者说清空原来这个文件里面的内容重新写入 所以 前99个你本来写入数据了,但是你每次进入循环的时候又清空了上一次的 所以最后只有 第100个的值 , 建议wb改写成wb+

有问题再追问追问

改成了wb+,结果和之前一样。
我单步跟踪了一样,果然像你说的一样,后一次把前一次的结果清空了。
但是改成wb+还是不正确。

追答

不好意思 错了 呵呵 应该改成ab+ a是用来追加的

温馨提示:内容为网友见解,仅供参考
无其他回答

...100到999的水仙花数,程序有误打不出来,求高手指点一二,不胜感激代码...
include<stdio.h>int main(){ int a=1,b=0,c=0; while(a<=9) { while(b<=9) { while(c<=9) { if(a*a*a+b*b*b+c*c*c==a*100+b*10+c*1) printf("%d=a*a*a+b*b*b+c*c*c \\n",a*100+b*10+c*1); c++; } b++; c=0;...

C语言的文件读写
键盘输入,我们按Enter键,C\/C++语言收到的就是'\\n'(新行符)。打字机老概念:回车和换行,回车就是回到本行开始位置,换行就是到下一行。回车符 '\\r',换行符'\\n',老码 CRLF。“从键盘输入4个学生的数据是ASCII码,也就是文本文件”,把“也就是文本文件”删去。键盘输入是输入流,不叫文件。

C语言的文件读写
回车和换行符转换成一个换行符 -- 书本用的是老概念。键盘输入,我们按Enter键,C\/C++语言收到的就是'\\n' (新行符)。打字机老概念:回车和换行,回车就是回到本行开始位置,换行就是到下一行。回车符 '\\r' ,换行符'\\n' , 老码 CRLF。“从键盘输入4个学生的数据是ASCII码,也就是文本文...

C语言读写TXT文件问题
你好,一楼解释的字符串结束符'\\0'只是针对内存中C风格字符串。而对磁盘文件或者文件流来说是不适用的。出现“y上面两个点”的乱码的原因在于fopen()函数以及fgetc()函数上,在读取文件流上,末尾会读出一个值为-1的字符变量,正是由于这个怪异的值,才出现了那个乱码。我测试过了,读入-1跟文本...

C语言编程遇到问题,请求高手指点,是统计区间个数的问题
for(i=1;i<c;i++){ for(j=0;j<最大的个数;j++){ if(a[i]>minin&&a[i]<(minin+division)){ 存储链表 } } minin+=division;在链表中存储一个标记符 } 存储 因为不知道 大小 应该用链表

C语言文件读写结构体里面的数据怎样存到磁盘文件上
a 获得的文件是可读的,打开后可以很清楚的看到每个结构体的值。比如例子中的文件最终存储的是 1 2.300000 缺点为:a 代码量偏大,如果结构体中有数量较多的元素,那么需要逐个写输出的格式和语句,可见工作量会相当大。b 存储的文件大小不确定,可能比二进制存储时大,也可能更小,不同结构体数值...

编写C语言程序,实现对磁盘文件的操作。具体要求包括:
(一)C语言的结构 1.程序的构成,main函数和其他函数。2.头文件、数据说明、函数的开始和结束标志。3.源程序的书写格式。4. 语言的风格。(二)数据类型及其运算 1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。2.C运算符的种类、运算优先级和结合性。3.不同类型数据间...

c语言,有高手教我怎么导出运行结果吗??导出到指定文件。
功能是:将字符ch写到文件指针fp所指的文件中去.当输出成功,putc函数返回所输出的字符;否则,返回一个EOF值.EOF是在stdio.h库函数文件中定义的符号常量,其值等于-1.13.5调用getc(fgetc)和putc(fputc)函数进行输入和输出例如:把从键盘输入的文本按原样输出到名为file_1.dat文件中,用字符@作为键盘输入结束标志....

求C语言高手指点迷津,不胜感激。 由键盘任意输入3个数据,将它们按从大...
首先,应该没有a>b>c这种写法,应该是a>b&&b>c,先改这个吧 顺便提醒你一下,关于b>c,返回型应该是一个bool型,也就是0(假)或1(真),所以你输入2,9,8,在执行if(a>b>c||a>=b>c||a>b>=c)printf("%f,%f,%f\\n",a,b,c);时就结束了 ...

我想用C语言写一个文件粉碎机,求大神指点我该看些啥书,最好列个书名...
去搜索下!呵呵,最后我给你的建议是,找一个ARK的源代码来研究,很多人都写过的,比如像冰刃这样的,具有文件管理,强删等等。具体的书名的话《寒江独钓 Windows内核安全编程》《文件过滤驱动》《文件系统方面书籍等等》,不多说了,还有什么再call我吧,Good Luck!

相似回答
大家正在搜