首先在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引起的文件的数据保存与读取调试。的更多相关文章

  1. C语言-1.static 和 extern使用,2.文件,3.数据块读写

    1.static 和 extern使用, 1)修饰局部变量 static修饰局部变量特点:延长局部变量的生命周期 ,static修饰的局部变量只会被执行一次 extern不能修饰局部变量 2)修饰全局 ...

  2. C.【转】C语言字符串与数字相互转换

    1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...

  3. Swift语言指南(五)--数字字面量和数字类型转换

    原文:Swift语言指南(五)--数字字面量和数字类型转换 数字字面量 整数字面量写法如下: · 十进制数,无前缀 · 二进制数,以 0b 为前缀 · 八进制数,以 0o 为前缀 · 十六进制数,以 ...

  4. C 语言实例 - 判断数字为几位数

    C 语言实例 - 判断数字为几位数 用户输入数字,判断该数字是几位数. 实例 #include <stdio.h> int main() { long long n; ; printf(& ...

  5. C 语言实例 - 循环输出26个字母

    C 语言实例 - 循环输出26个字母 循环输出 个字母. 实例 #include <stdio.h> int main() { char c; for(c = 'A'; c <= ' ...

  6. 李洪强漫谈iOS开发[C语言-044]-翻译数字

     李洪强漫谈iOS开发[C语言-044]-翻译数字

  7. R语言笔记1--向量、数组、矩阵、数据框、列表

    注释:R语言是区分大小写的 1.向量 R语言中可以将各种向量赋值为一个变量,这种赋值操作符就是等号“=”,也可以使用“<-”. 1)产生向量 (1)函数c() 例如:x1=c(2,4,6,8,0 ...

  8. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  9. 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...

随机推荐

  1. 并不对劲的THUWC2020

    day -inf 因为一些(不是寒假时长锐减的)小原因,今年(2020)THUWC在去年(2019)就举办了! 这导致某个小弱智只能临阵磨枪了QAQ- day 1 早: 没有看到吕爷,签到.试机. 签 ...

  2. java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast

    解决方案 在配置文件中配置proxy-target-class="true" <aop:aspectj-autoproxy proxy-target-class=" ...

  3. hdu 1875 最小生成树 prime版

    最小生成树prime版 大致的步骤 首先选取一个到集合最近的点 然后标记起在集合内部 然后更新最短距离 畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    ...

  4. SQL Server抛出异常信息 RAISERROR

    用于数据库抛出具体异常信息给程序,示例:BEGIN TRY    /*    RAISERROR ('Error raised in TRY block.', -- Message text.     ...

  5. CSS3实现瀑布流布局

    讲干货,不啰嗦,瀑布流布局是种常见的布局方式,常用于图片相关的样式展示,通过CSS3的多列(Multi-column)属性,可以简单的实现类似效果. 具体步骤: 1.设置外部容器多列列数(column ...

  6. js写guess网页

    (一)布局           猜前                            ->                         猜后 (二)明确实现功能和具体实现: 1.网页生 ...

  7. el-table——可合并单元格的表格

    <el-table v-loading="loading" :data="tableData" border :span-method="col ...

  8. 分布式系统唯一ID生成方案

    分布式系统唯一ID生成方案汇总 数据库自增主键 最常见的方式.利用数据库,全数据库唯一. 优点: 1)简单,代码方便,性能可以接受. 2)数字ID天然排序,对分页或者需要排序的结果很有帮助. 缺点: ...

  9. 三年总结出来的11个JPA和Hibernate查询配置小技巧

    JPA和Hibernate提供了一系列暗示hints能够帮助你更好地定制你的查询语言,这些小暗示或暗语是一种附加信息,你可以利用这些暗语做很多事情,比如设置查询的timeout,使用实体图或定义查询缓 ...

  10. python基本应用--三元应用

    格式为:result=值1 if 条件 else 值2 如 a,b,c = 1,3,5 d =a if a>b else c 那么d的结果是多少? 其实可以使用if来完全表达 if a>b ...