【发布时间】:2015-11-04 10:42:20
【问题描述】:
我偶然发现,disp(fprintf()) 会打印 fprintf 的字符串加上它所拥有的字符数。我知道,disp() 是多余的,但出于纯粹的好奇心,我想知道为什么它会打印字符数,因为有一天这实际上可能会有所帮助。
例如
disp(fprintf('Hi %i all of you',2))
结果
嗨 2 你们 15 岁
【问题讨论】:
我偶然发现,disp(fprintf()) 会打印 fprintf 的字符串加上它所拥有的字符数。我知道,disp() 是多余的,但出于纯粹的好奇心,我想知道为什么它会打印字符数,因为有一天这实际上可能会有所帮助。
例如
disp(fprintf('Hi %i all of you',2))
结果
嗨 2 你们 15 岁
【问题讨论】:
问题中提到的具体行为的原因是使用存储变量调用 FILEprintf fprintf:
nbytes = fprintf(___)使用上述语法中的任何输入参数返回fprintf写入的字节数。
所以发生的情况是disp(fprintf(...)) 首先按照fprintf 打印文本而没有存储变量,但disp 只看到fprintf 的存储变量,这是您的字符串的字节数,因此输出。
另外,如果要显示字符串,需要STRINGprintf:sprintf:
disp(sprintf('Hi %i all of you',2))
Hi 2 all of you
文档告诉我的是,sprintf 专门用于字符串格式化,您可以使用它向图表添加文本、设置顺序文件名等,而 fprintf 写入文本文件。
str = sprintf(formatSpec,A1,...,An)将数组A1,...,An中的数据按照formatSpec的列顺序格式化,并将结果返回到字符串str。
fprintf(fileID,formatSpec,A1,...,An)按列顺序将formatSpec应用于数组A1,...An的所有元素,并将数据写入文本文件。fprintf使用在对fopen的调用中指定的编码方案。
fprintf(formatSpec,A1,...,An)格式化数据并将结果显示在屏幕上。
为了在屏幕上显示文本,因此 disp(sprintf()) 或 fprintf 是相等的,但是如果要将结果存储在字符串中,则必须使用 sprintf 并且如果要将其写入文本文件中使用fprintf。
【讨论】:
fprintf 而不使用disp 之间的行为是否存在差异?
sprintf 的好处是您可以按照自己的意愿构造字符串;例如我用它在我的图表上绘制“多边形的面积是 %d 平方米”。 sprintf 也可用于生成顺序文件名,即sprintf('SequentialFile_%i.mat',LoopVariable)。我会检查确切的差异,因为我很少使用fprintf
在fprintf 的文档中,您会看到fprintf 的输出是打印的字节数。所以在这里,fprintf 正在打印 Hi 2 all of you,disp 正在打印 fprintf 返回的 15。
【讨论】:
doc fprintf 时,我找到了这个:de.mathworks.com/help/simulink/slref/fprintf.html
sprintf 而不是 fprintf