在MATLAB中用fscanf输出文件内容,应该是个数组,但却只有几个字符输出

fclose(fid);
fid=fopen('test.txt','r');
A1=fscanf(fid,'%c',30)
A2=fscanf(fid,'%f,%f,%f',[30 Inf]) //A2应输出一数组但只有几个字符
fclose(fid);

text.txt文件内容如下
This is a Formated file
1 +8.414710e-001 +5.403023e-001
 2 +9.092974e-001 -4.161468e-001
3 +1.411200e-001 -9.899925e-001
 4 -7.568025e-001 -6.536436e-001
5 -9.589243e-001 +2.836622e-001
想请问一下A2那行哪里错了,但A1能正常输出这是为啥?

fid=fopen('test.txt','r');
A1=fscanf(fid,'%c',26)
A2=fscanf(fid,'\n%f \n %f\n %f',[3 inf])%A2应输出一数组但只有几个字符
fclose(fid);

1、A1=fscanf(fid,'%c',30),30的长度太长了,已经到第二行的1的位置,所以改短了些
2、A2=fscanf(fid,'%f,%f,%f',[30 Inf])这句首先是没弄清楚参数的意思,[]表示被填充的数组的大小,按照你的意思,数组应该是有3列,行数未定,所以是[3 inf]
3、不知道你注意了没有 “ 1 +8.414710e-001 +5.403023e-001”数据之间是用回车符分隔的(可以复制粘贴到记事本中查看),所以fscanf()中‘ ’部分要加回车符追问

试了,但还是不行输出是A2=[],另外中间是用空格隔开的不是回车符

追答

我上面的程序是根据你给的test.txt(把你的数据复制粘贴到记事本中)来写的,经测试正常,如果你确定中间使用空格隔开的话,就用
fid=fopen('test.txt','r');
A1=fscanf(fid,'%c',26)
A2=fscanf(fid,'%f %f %f',[3 inf])
fclose(fid);

追问

但还是这样啊。。。。那个我用的是2010b的版本。。。

追答

把text.txt这个文档传上来

追问

txt发不过来,但有创建它的代码:

最后一行加上  fclose(fid);    另外抱歉了。。。代码直接打会超字数。。。

追答

你为什么要用\b(backspace)呢,这个又不是空格的意思,要用空格的话直接空格就行了
count=fprintf(fid,' %g',e(i,1))
count=fprintf(fid,' %+e',e(i,2:3))
这样在读的时候用A2=fscanf(fid,'%f%f%f',[3 inf])就行了

温馨提示:答案为网友推荐,仅供参考
相似回答