记录问题-vs 2013编程

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_shsf

来包瓜子嘛,谢谢客官~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值