1.以文本方式打开文件。
2.循环用fscanf格式化输入数据到数组。
3.判断fscanf的返回值,如果显示到达文件结尾,退出输入。
4.关闭文件。
5.使用数据。
二、代码实现:
1.设定文件名为in.txt, 存有一系列整型数据,以空格或换行分隔。
#include <stdio.h>
int main()
{
int v[100];//开一个足够大的数组。
int i = 0, j;
FILE *fp;//文件指针
fp = fopen("in.txt", "r");//以文本方式打开文件。
if(fp == NULL) //打开文件出错。
return -1;
while(fscanf(fp, "%d", &v[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF)
i++;
fclose(fp);//关闭文件
for(j = 0; j < i; j ++)//循环输出数组元素。
{
printf("%d ", v[j]);
}
return 0;
}
当文件内容为:
1 35 6 8 9 9
10 123 34
76 54 98
程序输出:
1 35 6 8 9 9 10 123 34 76 54 98
2.F:\pss_detect\fre_detect目录下存放由matlab生成的 接收数据中PSS序列的实部文件DataReal.txt和虚部文件DataImag.txt,现在通过C语言读取这两个文件,然后和本地PSS序列做运算,求出频偏。
优势:这样处理比较方便,在matlab中改变一次频偏,运行后即可更新实部和虚部文件中的数据,然后在codeblocks中运行查看是否是matlab中设置的频偏值。附录为matlab中的将数据存入文件代码。
int main()
{
int i=0,j;
int FreOffset;
FILE *fp;//文件指针
dataType realInformation[fftSIZE];//接收数据中PSS序列的实部
dataType imagInformation[fftSIZE];//接收数据中PSS序列的虚部
complex testData[fftSIZE];
/******读取F:\pss_detect\fre_detect\目录下用Matlab生成的实部******/
fp = fopen("F:\\pss_detect\\fre_detect\\DataReal.txt", "r");//以文本方式打开文件。
if(fp == NULL) //打开文件出错。
return -1;
while(fscanf(fp, "%lf", &realInformation[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF)
i++;
fclose(fp);//关闭文件
for(j = 0; j < i; j ++)//循环输出数组元素。
{
printf("%lf ", realInformation[j]);
}
i=0;
/******读取F:\pss_detect\fre_detect\目录下用Matlab生成的虚部******/
fp = fopen("F:\\pss_detect\\fre_detect\\DataImag.txt", "r");//以文本方式打开文件。
if(fp == NULL) //打开文件出错。
return -1;
while(fscanf(fp, "%lf", &imagInformation[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF)
i++;
fclose(fp);//关闭文件
for(j = 0; j < i; j ++)//循环输出数组元素。
{
printf("%lf ", imagInformation[j]);
}
for (i = 0; i < fftSIZE; i++){
testData[i] = dcomplex(realInformation[i], imagInformation[i]);
}
FreOffset = FreOffsetDetect(testData);
printf("FreOffset=%d\n",FreOffset);
return 0;
}
附录:
fd = fopen('DataReal.txt','w');
for i=1:1:2048
fprintf(fd,'%g ',real(DataAWGNFrequencyOffset(i)));
end
fclose(fd);
fd = fopen('DataImag.txt','w');
for i=1:1:2048
fprintf(fd,'%g ',imag(DataAWGNFrequencyOffset(i)));
end
fclose(fd);