这篇文章主要介绍“C语言或C++怎样从文本文件中读取和保存数据”,在日常操作中,相信很多人在C语言或C++怎样从文本文件中读取和保存数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言或C++怎样从文本文件中读取和保存数据”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
——文件流:C标准库提供了FILE(之所以命名为FILE,因为linux将所有机制都视为文件),FILE对象是一个包含了管理流所需的所有信息的结构,包括缓冲区信息、各种标记(如文件结束标记和错误标记)以及用于实际I/O的文件描述符等。
——输入流,输入流:数据从文件传送到内存的叫输入流,数据从内存传送到文件的叫输入流。——打开文件:FILE对象通过调用fopen函数创建的。如:FILE*fp,fp=fopen("filename","r"),表示以只读的方式建立与filename相关的文件流;filename为当前目录下的相对路径名,r代表可读(打开文件的模式)。
对一些有规范格式文件的读取,可使用标准库stdio.h下的fscanf函数,
函数原型为:intfscanf(FILE*stream,constchar*format,[argument...])
如读取文件data.txt(数据格式相对规范)
代码实现读取:
复制代码
//test.c
//文件读取
#include
intmain()
{
//1:创建文件流,文件指针名=fopen(文件名,使用文件方式)打开失败则返回NULL;
FILE*fp=fopen("./data.txt","r");//以data.txt文件为例
//2:检测文件是否打开成功;
if(!fp){
printf("打开失败!\n");
return-1;//返回异常
}
//3:
intnum;//用来储存一个整型数据
charname[10],place[10];//用来储存两个字符串数据
//抽象理解:
//理解文件位置含义:其表示已打开文件当前可读写字符的位置,其表示为一个到文件头的整数;
//fscanf在读取数据时可以这样理解:文件被打开后,它就成了一个无序字节流(水流),其会通过一个管道,流向被读取的一端;
//了解fscanf后知道,其遇到空格字符(空格,制表符),换行符,就会停止,这里的停止我们可以理解为:
//停下来为文件中两个不相关的数据块做一个分隔的操作,刚好适应了我们一般将空字符(包括换行符)作为两个数据之间的分隔的行为;
//我们只需理解管道的两端
//流进管道的一端的位置,就是文件的位置,表示已被读到的位置。
//流出管道一端,就是进程用来读取数据的一端,其可以对管道中已经做区分的数据进行读取。
//4:读取:
fscanf(fp,"%d%s%s",&num,name,place);//fscanf对流的格式化读取。
//注1:fscanf(fp,"%da%s%s",&num,name,place);可以实现对数据:1a小刚河南;的准确读取,表示两个数据之间以a为界。
//注2:因为流是指针的性质,所以函数是将各数据块的首地址交给对应参数,所以num需进行&取地址操作,
//注3:因为name,place本身已表达地址,所以不用改变;
fscanf(fp,"\n");
//\n为控制字符,此时文件的位置到了第二行的开始;
//接着进行操作:fscanf(fp,"%d%s%s",&num,name,place);就可以继续读取第二行
//所以我们常常只需利用一个while语句就可以将整个文件读取到一个数据结构(进程)中
/*
while(!feof(fp))//feof()检测一个文件是否结束,即到达文件尾,若结束,则返回非0值,否则返回0
{
fscanf(fp,"%d%s%s\n",&num,name,place);
}
*/
//检测读取结果
printf("%d%s%s\n",num,name,place);
//关闭流
fclose(fp);
return0;
}
到此,关于“C语言或C++怎样从文本文件中读取和保存数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。