- 编写环境Visual Studio 2015;
- 本人是学工科的,有些时候需要将下位机的数据读取处理,但是通过单片机处理的便携性不如用c直接快捷,而且有时候没法验证算法的准确性,但是读取数据这块遇到了问题,下面给大家分享一下。本人也是菜鸟,希望大家多多指正!!!
- 刚接触VS,对于编写c代码没有经验,最近需要读取一个文本测试的数据,并进行处理,想通过VS实现,但是晚上找了一大堆方法,VS老会显示fscanf不安全,让替换成fscanf_s,测试了一天不行,后来自己通过参考别人的代码,没有用fscanf等函数,实现了文件数据的读取。
- 注意:通过VS编写前,新建工程要把SDL关掉。
- 代码部分
(1)头文件引用,因为我这里自定义了函数文件,所以里面有#include “readdata.h”,也可以直接将函数放到主函数文件中**
#include <stdio.h>
#include <stdlib.h>
#include "readdata.h"
(2)定义的头文件内容
#ifndef _READDATA_H_
#define _READDATA_H_
#define MAX_LINE 1024 //代表一个字符串的长度,基本够用
void Read_data(float data[], int *len);
void Sumdata(float data[], int len, float *sum);
#endif
(3)下面来看两个函数
读取txt文本数据函数
void Read_data(float data[], int *len) //读取txt文本数据
{
char buf[MAX_LINE]; /*缓冲区*/
int i = 0; /*行字符个数*/
FILE *fp; //定义文件指针
fp = fopen("e:\\1.txt", "r"); //打开文件
if (fp == NULL) //判断文件是够打开
{
printf("文件未打开\n");
}
else
{
printf("文件打开\n");
while (fgets(buf, MAX_LINE, fp) != NULL) //顺序读取文件里面的内容,直到读取完毕
{
data[i++] = atof(buf); //将读取的字符串转换成浮点数
printf("浮点数:%.2f\n", data[i - 1]); //将转换的浮点数打印显示
if (i >= Len_Data) //读取任意长度数据可以设置Len_Data大小
break;
}
*len = i;
}
}
对文本数据进行求和处理,这部分是我自己为了测试用,也可自行编写
void Sumdata(float data[],int len,float *sum) //用于验证读取数据的准确性
{
int i;
*sum = 0;
for (i = 0; i < len; i++)
{
*sum = *sum + data[i];
}
}
主函数调用部分
#include <stdio.h>
#include <stdlib.h>
#include "readdata.h"
void main(void)
{
float data[100];
int len;
float sum;
Read_data(data,&len);
Sumdata(data, len, &sum);
printf("数据长度为:%d 数据和为:%.2f\n", len,sum);
system("pause");
}
- 测试文件及结果:
文件内容:
1.1
2.1
2.2
3.4
4.5
5.0
6.7
7.9
8.1
9.3
测试结果:
文件打开
浮点数:1.10
浮点数:2.10
浮点数:2.20
浮点数:3.40
浮点数:4.50
浮点数:5.00
浮点数:6.70
浮点数:7.90
浮点数:8.10
浮点数:9.30
数据长度为:10 数据和为:50.30
请按任意键继续. . .
本文希望对于初学者有帮助,请各位批评指正!!!