引子:新近在做热电偶的分度表,由于要提高其解析度,若以要对已有的分度表进行插值。然而,上万个数据,若是手动插值,不知道要弄到猴年马月。小试一下C语言的fscanf和fprintf的格式化输入和输出,因为之前从来没有使用C来操作文件,所以一番折腾,还好成功了,现贴出来,以后再用。
insert_new_elsement.c
#include <stdio.h>
typedef struct{
int V;
int T;
}V2T_T, *V2T_PT;
int main()
{
int i;
V2T_T a[3], b[2];
char filename1[80], filename2[80];
FILE *pOrigin, *pNew;
printf("输入源文件名:");
gets(filename1);
printf("输入目的文件名:");
gets(filename2);
pOrigin = fopen(filename1, "rb");
pNew = fopen(filename2, "wb");
do{
fscanf(pOrigin, "%d %d", &a[0].V, &a[0].T);
fscanf(pOrigin, "%d %d", &a[2].V, &a[2].T);
if(0 != feof(pOrigin)) break;
a[1].V = (a[0].V + a[2].V) >> 1;
a[0].T *= 10;
a[2].T *= 10;
a[1].T = (a[0].T + a[2].T) >> 1;
b[1].V = (b[0].V + a[0].V) >> 1;
b[1].T = (b[0].T + a[0].T) >> 1;
printf(" {%d, %d},\n", b[1].V, b[1].T);
fprintf(pNew, " {%d, %d},\n", b[1].V, b[1].T);
b[0] = a[2];
i=0;
do{
printf(" {%d, %d},\n", a[i].V, a[i].T);
fprintf(pNew, " {%d, %d},\n", a[i].V, a[i].T);
}while(++i < 3);
}while(0 == feof(pOrigin));
fclose(pOrigin);
fclose(pNew);
return 0;
}
源文件节选
-78578 -200
-78174 -199
-77770 -198
-77366 -197
-76962 -196
-76558 -195
-76255 -194
-75851 -193
-75447 -192
-75043 -191
-74639 -190
目标文件节选
{-78578, -2000},
{-78376, -1995},
{-78174, -1990},
{-77972, -1985},
{-77770, -1980},
{-77568, -1975},
{-77366, -1970},
{-77164, -1965},
{-76962, -1960},
{-76760, -1955},
{-76558, -1950},
{-76407, -1945},
{-76255, -1940},
{-76053, -1935},
{-75851, -1930},
{-75649, -1925},
{-75447, -1920},
{-75245, -1915},
{-75043, -1910},
{-74841, -1905},
{-74639, -1900},