c语言从txt文本读取数据

概述

下载了visual studio 2019,想要从下面的txt文本里读取数据到数组中,本来以为是比较简单的,但是发现自己对c语言的使用还是不太熟练导致了许多问题,所以还是小记一下。首先要说的是这个程序开始总是报debug assertion failed的错误,但是我出去玩了两天回来竟然不报错了。下次碰到这个问题先将软件关闭再打开或者开机重启试试。
在这里插入图片描述
首先还是把程序贴上来,因为是想把这一功能封装成函数,所以写成了函数形式,然后从主函数中调用

#include "mySVM.h"

void getTxtData(char* pFileName) {
	errno_t err;
	FILE* pFile;
	err = fopen_s(&pFile, pFileName, "r");//读取名为pFileName的文本文件 
	
	if (err != 0)//判断文件是否打开是否成功 
		printf("文件打开失败\n");
	else
		printf("文件打开成功\n");

	double data[10][3];//先只考虑文件中的数据为10行3列的小数
	for (int i = 0;i < 9;i++)//读取10个浮点型数据
		fscanf_s(pFile, "%lf %lf %lf", &data[i][0], &data[i][1], &data[i][2] );//fscanf_s函数固定格式读取文本中的数据; 
	
	for (int i = 0;i < 9;i++) {//将读取的数据输出
		for (int j = 0;j < 3;j++)
			printf("%f ", data[i][j]); 
		printf("\n");
	}
	fclose(pFile);

}
```c
#include "mySVM.h"

void main() {
		getTxtData("D:\\123.txt");
}

运行结果如下:
在这里插入图片描述

fopen()与fopen_s()

在使用fopen()打开文件时,会报错说这个函数不安全,建议用fopen_s(),这是因为fopen()确实不太安全,网上说是确实溢出检查,所以vs2019会建议你用fopens(),如果是其他的软件或者老版的vs可能就不会报这个错误,也就是它们允许这种不安全的行为发生。下面是两个函数的用法和区别:

fopen()用法:fp = fopen(filename,“w”)
fopen_s()用法:需要定义另外一个变量errno_t err,然后err = fopen_s(&fp,filename,“w”)
fopen()打开文件成功,返回文件指针(赋值给fp),打开失败则返回NULL值;
fopen_s()打开文件成功返回0,失败返回非0,文件指针也是赋值给fp

其中的类型errno_t是通过 typedef int errno_t 定义的,所以本质上errno_t是int类型。文件打开后也要记得用fclose()关闭。
另外fscan()和fscanf_s()的情况也是类似,这里不详细叙述了。需要注意的是从网上找到这样的一句话:

根据c标准,输入时float用%f,double用%lf,输出时float和double都用%f

如果double输入也用%f会有警告,且读入的数据会出现一些问题
在这里插入图片描述

  • 18
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值