将fprintf与双数组和单元数组合使用

时间:2016-02-18 15:54:58

标签: matlab cell-array

使用fprintf我想生成一个如下所示的输出:

  

命名abc和数字1
  名称def和数字2
  姓名ghi和数字3

这是我尝试用来实现此目的的代码:

names= {'abc','def','ghi'}
numbers = [1 2 3];
fprintf('names %s and numbers %2.2f \n',names{1:3},numbers)
不幸的是,它产生的输出看起来像这样:

  

命名abc和数字100.00
  姓名ef和数字103.00
  姓名和号码1.00
  姓名和号码

有谁知道如何解决这个问题?或者甚至可以将fprintf与单元格数组合?提前致谢

2 个答案:

答案 0 :(得分:4)

看一下你传递给fprintf的内容,它的顺序是错误的,数字创建一个参数而不是三个个体:

>> names{1:3},numbers

ans =

abc


ans =

def


ans =

ghi


numbers =

     1     2     3

改为使用:

C=names
C(2,:)=num2cell(numbers)
fprintf('names %s and numbers %2.2f \n',C{:})

如果您在C{:}中排序,您将按顺序看到各个参数:

>> fprintf('names %s and numbers %2.2f \n',C{:})
names abc and numbers 1.00 
names def and numbers 2.00 
names ghi and numbers 3.00 

>> C{:}

ans =

abc


ans =

     1


ans =

def


ans =

     2


ans =

ghi


ans =

     3

答案 1 :(得分:2)

您看到的输出本身很有趣:它将abc解析为字符串,然后将d解析为ASCII码,然后将ef再次解析为字符串并g作为数字,然后hi作为字符串,1作为数字,后两者失败,因为MATLAB无法将2视为字符串。这意味着fprintf的一个重要事项:它以列主要顺序获取其参数。

因此,考虑到这一点,我们尝试创建例如

的单元格数组
for ii=numel(numbers)-1:1
    tmp{ii,2} = numbers(ii);
    tmp{ii,1} = names{ii};
end
不幸的是,

导致fprintf无法使用单元格数组的错误。我会选择一个可靠的for循环:

names= {'abc','def','ghi'} ;
numbers = [1 2 3];
for ii=1:numel(numbers)
    fprintf('names %s and numbers %2.2f \n',names{ii},numbers(ii))
end

names abc and numbers 1.00
names def and numbers 2.00
names ghi and numbers 3.00