C/C++语言之由数字26引起的文件的数据保存与读取调试。
首先在VS2010中遇到的问题是,建立了一个结构体
struct position{
int x;
int y;
};
然后用此结构体声明一个数组rout[8];
for(int i=0;i<8;i++)
rout[i]=i+25;
然后把结构体数据存储到文件中
fwrite(&rout[i],sizeof(position),1,fp);
从文件中直接观察到的字节数为sizeof(position)*8,但是读取数据时
fread(temp,sizeof(position),1,fp);
并不能读取到文件的结尾处就结束。
后来发现是读取到rout[i].x=26时就结束。
问题1,读到这个26就结束的原因是什么?
在验证过程中,有以下代码
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+25;
FILE *fp=fopen("rout_list13.txt","w");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","r");
while(t<10)
{
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
发现输出的结果一直是

问题2:问什么会出现值不变的情况?
对以上代码做以下更改
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+6;
FILE *fp=fopen("rout_list13.txt","w");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","r");
while(t<10)
{
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
可以看到出现这样的结果

首先分析数组存在10个数从6到15结束,但是读取了20次,当读取到结尾处时数据一直不变。
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+20;
FILE *fp=fopen("rout_list13.txt","w");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","r");
while(t<10)
{
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
fread(&temp,sizeof(int),1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
结果是

所以由以上的调试过程可以得到以下结论:当文件数据读取结束后,在对文件进行读取时值为最后读取的结果并保持不变,可以回答问题2.
继续讨论问题1,通过用fseek函数进行定位,发现26这一个数在文件中占用4个字节的数据。
后面百度了一下26的文件读取问题,得到了解决的方法。
在向文件中写或读数据时用二进制进行表示。代码如下
#include"Stdafx.h"
#include<iostream>
#include"atlstr.h"
using namespace std;
int rout[10];
void main()
{
int t=0;
int temp;
for(int i=0;i<10;i++)
rout[i]=i+24;
FILE *fp=fopen("rout_list13.txt","wb");
for(int i=0;i<10;i++)
fwrite(&rout[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("rout_list13.txt","rb");
while(t<5)
{
fread(&temp,4,1,fp);
printf("%d",temp);
t++;
}
fclose(fp);
}
结果为

问题1也得到了解决。
C/C++语言之由数字26引起的文件的数据保存与读取调试。的更多相关文章
- C语言-1.static 和 extern使用,2.文件,3.数据块读写
1.static 和 extern使用, 1)修饰局部变量 static修饰局部变量特点:延长局部变量的生命周期 ,static修饰的局部变量只会被执行一次 extern不能修饰局部变量 2)修饰全局 ...
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- Swift语言指南(五)--数字字面量和数字类型转换
原文:Swift语言指南(五)--数字字面量和数字类型转换 数字字面量 整数字面量写法如下: · 十进制数,无前缀 · 二进制数,以 0b 为前缀 · 八进制数,以 0o 为前缀 · 十六进制数,以 ...
- C 语言实例 - 判断数字为几位数
C 语言实例 - 判断数字为几位数 用户输入数字,判断该数字是几位数. 实例 #include <stdio.h> int main() { long long n; ; printf(& ...
- C 语言实例 - 循环输出26个字母
C 语言实例 - 循环输出26个字母 循环输出 个字母. 实例 #include <stdio.h> int main() { char c; for(c = 'A'; c <= ' ...
- 李洪强漫谈iOS开发[C语言-044]-翻译数字
李洪强漫谈iOS开发[C语言-044]-翻译数字
- R语言笔记1--向量、数组、矩阵、数据框、列表
注释:R语言是区分大小写的 1.向量 R语言中可以将各种向量赋值为一个变量,这种赋值操作符就是等号“=”,也可以使用“<-”. 1)产生向量 (1)函数c() 例如:x1=c(2,4,6,8,0 ...
- C语言博客作业06——结构体&文件
C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...
- 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...
随机推荐
- ftp-server(对象存储)
1.背景 在腾讯云弄了一个对象存储,想通过ftp上传照片 说明连接: 腾讯云:https://cloud.tencent.com/document/product/436/7214 GitHub:ht ...
- 设计Qt风格的C++API
在奇趣(Trolltech),为了改进Qt的开发体验,我们做了大量的研究.这篇文章里,我打算分享一些我们的发现,以及一些我们在设计Qt4时用到的原则,并且展示如何把这些原则应用到你的代码里. 优秀AP ...
- linux时间同步ntpdate
1.安装ntpdate,执行以下命令 yum install ntpdate -y 2.手工同步网络时间,执行以下命令,将从time.nist.gov同步时间 ntpdate 0.asia.pool. ...
- Task执行多次
项目中,曾经出现过启动时数据库连接数瞬间增大,当时并没有注意该问题. 后期,由于Task任务多次执行,才着手查看这个问题,经排查,由于tomcat中webapp配置多次,导致webapp被扫描多次(配 ...
- Java 实现简单的 RPC 框架
RPC 简介 RPC,全称为 Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式,而不需要了解底层网络技术 ...
- Vibe
在读研和工作之间徘徊了半年,看着一个个好友工作.保研,生活安排得井井有条,我也是时候收拾心情,整装前进了.既然选择了图像,就一定要好好做下去. 今天开始第一个算法,Vibe. ViBe是一种像素级视频 ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 HtmlHelper-超链接方法
一.@Html.ActionLink()概述 在MVC的Rasor视图引擎中,微软采用一种全新的方式来表示从前的超链接方式,它代替了从前的繁杂的超链接标签,让代码看起来更加简洁.通过浏览器依然会解析成 ...
- [NOIP2018模拟赛10.25]瞎搞报告
闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...
- Django rest-framework框架-组件之视图
视图: a. django class Test(View): ... b. rest_framework class Test(APIView): ... c. GenericAPIView 一般不 ...
- 关于Objective C的私有函数
(1)很多从其他语言(例如C++)转到objective c的初学者,往往会问到一个问题,如何定义类的私有函数?这里的“私有函数”指的是,某个函数只能在类的内部使用,不能在类的外部,或者派生类内部使用 ...