【问题标题】:Printing multiple disp functions with one for loop使用一个 for 循环打印多个显示函数
【发布时间】:2018-08-31 17:56:22
【问题描述】:

所以,我有一系列的显示功能,从 x1 到 x7。这些都包含字符串和变量,例如:

x1 = ['The result of the scalar multiplication of V and U: ',num2str(scalar_uv)]; x2 = similar to above but with for example a value on the cross multiplication of the two scalars.

而不是通过以下方式打印出每一个: disp(x1); disp(x2); disp(x3);

我认为可以通过 for 循环或嵌套的 for 循环将它们全部打印出来,但我不知道该怎么做。我最好不想要直接的解决方案(我不会对他们说不),而是想要一些可能的提示或技巧。

【问题讨论】:

  • 我无法让它正常运行,而是先打印出所有文本,然后打印出看起来不太好的值。它还有丑陋的 C(1,:) = 等等。

标签: matlab for-loop vector


【解决方案1】:

一个简单的示例解决方案是创建一个元胞数组并循环遍历它,或者使用celldisp() 来显示它。但是,如果您想很好地打印,即专门格式化到命令窗口,您可以使用fprintf 函数并在换行符中设置格式。例如:

for displayValue = {x1, x2, x3, x4}
    fprintf('%s\n', displayValue{1});
end

如果您需要更多格式选项,例如精度或字段宽度,格式规范代码(示例中为%s)有许多配置。您可以在fprintf helpdoc 上看到它们。 \n 只是告诉 fprintf 函数在打印时创建一个换行符。

【讨论】:

    【解决方案2】:

    无需创建七个不同的变量 (x1...x7),只需创建一个元胞数组来保存所有字符串:

    x{1} = ['The result of the scalar multiplication of V and U: ',num2str(scalar_uv)];
    x{2} = ['Some other statement with a value at the end: ',num2str(somevar)];
    

    现在你可以写一个循环了:

    for iX = 1:length(x)
      disp(x{iX})
    end
    

    或者使用 cellfun 来显示它们而无需 for 循环:

    cellfun(@disp,x)
    

    如果你真的想让它们命名为 x1...x7,那么你可以使用 eval 语句来获取你的变量名:

    for iX = 1:7
       disp(eval(['x' num2str(iX)]));
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多