参考文件:https://www.cnblogs.com/lanhaicode/p/10320097.html
链接上文件说得有点详细
读取txt文件内容并写入到变量里面,主要说fscanf和sscanf两个函数
scanf:可以自动识别换行符和空格符
(1)fscanf可以读取txt文件里面同一行多个变量和不同行的变量都同时读取到多个变量里面
#define FILE_SET "/bin/navigation_test.txt"
FILE *fp ;
double alpha;
double wVoronoi;
double wObstacle; //0.2 -> 0.1 ->0
double wCurvature; //曲率项系数越大,轨迹扭曲越严重 0.2->0.1->0.05 ->0
double wSmoothness; //0.2 ->0.1->0
int iteration; //迭代次数
int maxiteration; //最大迭代数
double kMax; //曲率
double obsDstMax;
fp = fopen(FILE_SET,"r");
if (fp)
{
读取
fscanf(fp,"%lf %lf %lf %lf %lf %d %d %lf %lf",\
&alpha,&wVoronoi,&wObstacle,&wCurvature,&wSmoothness,\
&iteration,&maxiteration,&kMax,&obsDstMax);
//打印
log_printf("alpha: %lf, wVoronoi: %lf, wObstacle: %lf,wCurvature: %lf,wSmoothness: %lf, iteration: %d, maxiteration: %d, kMax: %lf, obsDstMax: %lf",\
alpha,wVoronoi,wObstacle,wCurvature,wSmoothness,iteration,maxiteration,kMax,obsDstMax);
fclose(fp);
}
上面只是片段代码;其中txt文件是:
0.03
0
0
0
0.2
0
50
0.2
0.5
或者:
0.03 0 0 0 0.2 0 50 0.2 0.5
(2)sscanf是先读取到一个缓存里面,然后再赋值到各个变量中,是逐行读取的,这种用法适用于多维变量
double b;
double a;
FILE *fp = fopen(FILE_SET,"r");
if (fp)
{
char buf[200] = {0};
while (fgets(buf,sizeof(buf),fp) != NULL) //fgets()是逐行读取
{
sscanf(buf,"%lf %lf",&b,&a); //同时读取一行txt
printf("b: %lf\n",b);
printf("a: %lf\n",a);
}
}
fclose(fp);
txt文件
12 13
24 87
37 17
以上博客还不够全面只是个人笔记方便理解,仅供参考