VS2017 C++读取Txt数据的方法

                                                 目录

1.这里采用fopen_s()函数打开文件。

2.对一些有规范格式文件的读取,可使用标准库stdio.h下的fscanf_s函数。

3.如读取文件data.txt(数据格式相对规范)


  • 在C程序中:

与程序代码外的数据(文件)打交道,我们使用到流(stream)这个概念,实现进程的虚拟内存与文件之间的数据交换。

——文件流:C标准库提供了FILE(之所以命名为FILE,因为linux将所有机制都视为文件) ,FILE对象是一个包含了管理流所需的所有信息的结构,包括缓冲区信息、各种标记(如文件结束标记和错误标记)以及用于实际I/O的文 件描述符等

——输入流输入流:数据从文件传送到内存的叫输入流,数据从内存传送到文件的叫输出流。

——打开文件:FILE对象通过调用fopen函数创建的。如: FILE *fp, fp=fopen("filename","r"), 表示以只读的方式建立与filename相关的文件流;filename为当前目录下的相对路径名,r代表可读(打开文件的模式)。


1.这里采用fopen_s()函数打开文件。

函数结构:

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);

参数:

  • [out] pFile
    A pointer to the file pointer that will receive the pointer to the opened file——指向文件指针的指针,文件指针将接收指向已打开文件的指针。

  • [in] filename
    Filename—— 文件名   

  • [in] mode
    Type of access permitted——允许的访问类型


2.对一些有规范格式文件的读取,可使用标准库stdio.h下的fscanf_s函数。

函数原型为:

int fscanf_s( 
   FILE *stream,
   const char *format [,
      argument ]... 
);

参数:

  • stream
    Pointer to FILE structure——指向文件结构的指针。

  • format
    Format-control string——窗体控件字符串。

  • argument
    Optional arguments——可选参数。

  • locale
    The locale to use——要使用的区域设置。


3.如读取文件data.txt(数据格式相对规范)

0.211487	1.22498	2.211	3.21899	4.21051	5.21576	6.21826	7.21802	8.21777	9.26147	

代码实现读取:

#include <stdio.h>
#include "GlobalVarDefine.h"

FILE *stream;

void readJiaoDu()
{
	int i;
	float Jiaodu, AziumJiaoDu[10];
	//1:创建文件流,返回值=fopen_s(指向文件指针的指针,文件名,使用文件方式)打开失败则返回NULL;
	errno_t err;
	err = fopen_s(&stream, "H:\\data.txt", "r"); //以data.txt文件为例
	//2:检测文件是否打开成功;
	if (err != 0) {                   //文件读取成功,则返回0
		printf("文件打开失败!\n");
	}
	else {
		printf("文件打开成功!\n");
	}

	//3
	//抽象理解:
	//理解文件位置含义:其表示已打开文件当前可读写字符的位置,其表示为一个到文件头的整数;
	//fscanf在读取数据时可以这样理解:文件被打开后,它就成了一个无序字节流(水流),其会通过一个管道,流向被读取的一端;
	//了解fscanf后知道,其遇到空格字符(空格,制表符),换行符,就会停止,这里的停止我们可以理解为:
	//停下来为文件中两个不相关的数据块做一个分隔的操作,刚好适应了我们一般将空字符(包括换行符)作为两个数据之间的分隔的行为;
	//我们只需理解管道的两端
	//流进管道的一端的位置,就是文件的位置,表示已被读到的位置。
	//流出管道一端,就是进程用来读取数据的一端,其可以对管道中已经做区分的数据进行读取。

	//4:读取:

	for (i = 0; i < 10; i++) {
		fscanf_s(stream, "%f", &Jiaodu); //fscanf_s对流的格式化读取。
		AziumJiaoDu[i] = Jiaodu;
	}
	printf("%f\n", AziumJiaoDu[0]);   // Output data read:


	// Close stream if it is not NULL
	if (stream)
	{
		err = fclose(stream);
		if (err == 0)
		{
			printf("The file was closed\n");
		}
		else
		{
			printf("The file was not closed\n");
		}
	}

	// All other files are closed:
	int numclosed = _fcloseall();
	printf("Number of files closed by _fcloseall: %u\n", numclosed);
}

程序运行结果:

文件打开成功!
0.211487
The file was closed
Number of files closed by _fcloseall: 0

出现上述结果,则表明数据读取成功!

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珞瑜·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值