最近做项目,编程出了点小问题,记录下,方便以后温故知新
1 fopen fopen_s fscanf fscanf_s
FILE *f;
fopen_s(&f,"F……", "r");
if(f == NULL)
cout << "file open erro" << endl;
else
{
for (int i = 0; i < m; i++)
{
fscanf_s(f, "%lf", &x[i],sizeof(double));
}
}
问题出在fopen fopen_s, fscanf fscanf_s以及%lf上
首先注意前面定义的x数据类型是double,用%lf,指定写入长度。
fopen:
FILE * fopen(const char * path,const char * mode);接收两个实参
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
示例程序源码:
FILE *cfPtr;
if((cfPtr = fopen("test.dat","w")) == NULL) //若cfPtr = NULL,即文件未成功打开,函数返回0,否则返回1
return 0;
else return 1;
fopen_s:
fopen_s( FILE** pFile, const char *filename, const char *mode );
pFile:文件指针将接收到打开的文件指针指向的指针。filename:文件名。mode:允许的访问类型。
返回值:如果成功返回0,失败则返回相应的错误代码。
多了一个指定类型的参数。
2. 中断, 有未经处理的异常
for (int i = 0, j = 0; i < lenx || j < lenx / 2.0; i++,j++)
{
MPpn[i] = (fpwn[i].real * fpwn[i].real + fpwn[i].image * fpwn[i].image) / lenx;
Y[j] = MPpn[i];
}
这里出错是因为后面j++没写,没有递增,判断没有意义((lll¬ω¬))
mat文件变成txt文件
一、语法及功能描述
dlmwrite(filename, M)
将数组M写入到ASCII格式的文件中,文件名为filename,每个元素之间默认以‘,’隔开。如果filename已经存在,则该函数将覆盖。
dlmwrite(filename, M, ‘-append’)
将数据添加到已经存在的filename文件后面。
dlmwrite(filename, M, delimiter)
将数据M写入到filename文件中,并以特殊字符delimiter将每个元素隔开。
二、参数说明
filenane:写入文件名;
M:需要保存的数据;
delimiter:两个元素之间的分隔符;
precision:数据精度;
newline:行终止符,‘pc’表示使用回车换行符,‘unix’表示换行符。
三、示例
1、写入数据时以逗号分隔元素
生成一个样本矩阵M
M = magic(3);
使用默认的分隔符‘,’将矩阵M写入到文件myFile.txt中
dlwrite(‘myFile.txt’, M)
查看文件中的数据
type(‘myFile.txt’)
8 1 6
3 5 7
4 9 2
2、以Tab间隔分隔元素并保存指定精度
M = magic(3)*pi
dlmwrite(‘myFile.txt’, M, ‘delimiter’, ‘\t’, ‘precision’, 3)
type(‘myFile.txt’)
25.1 3.14 18.8
9.42 15.7 22
12.6 28.3 6.28
3、在文件后添加数据
M = magic(5);
N = magic(3);
dlmwrite(‘myFile.txt’, M, ‘delimiter’, ’ ‘);
dlmwrite(‘myFile.txt’, N, ‘-append’, ‘delimiter’, ’ ‘, ‘roffset’, 1)
type(‘myFile.txt’)
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
8 1 6
3 5 7
4 9 2
4、以指定精度写入到文件中
M = magic(3);
dlmwrite(‘myFile.txt’, M, ‘precision’, ‘%.6f’)
type(‘myFile.txt’)
8.000000,1.000000,6.000000
3.000000,5.000000,7.000000
4.000000,9.000000,2.000000
5、指定行终止符
M = magic(3);
dlmwrite(‘myFile.txt’, M, ‘delimiter’, ’ ‘,’newline’,’unix’)
type(‘myFile.txt’)
就这一个函数,完美解决问题,另存为txt的方式不可取。