记录问题-vs 2013编程

来源:互联网 发布:mac截屏软件免费下载 编辑:程序博客网 时间:2024/05/01 08:08

最近做项目,编程出了点小问题,记录下,方便以后温故知新

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的方式不可取。

原创粉丝点击