【问题标题】:disp(fprintf()) prints the fprintf and the number of characters. Why?disp(fprintf()) 打印 fprintf 和字符数。为什么?
【发布时间】:2015-11-04 10:42:20
【问题描述】:

我偶然发现,disp(fprintf()) 会打印 fprintf 的字符串加上它所拥有的字符数。我知道,disp() 是多余的,但出于纯粹的好奇心,我想知道为什么它会打印字符数,因为有一天这实际上可能会有所帮助。
例如

disp(fprintf('Hi %i all of you',2))

结果

嗨 2 你们 15 岁

【问题讨论】:

    标签: matlab printf disp


    【解决方案1】:

    问题中提到的具体行为的原因是使用存储变量调用 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
    【解决方案2】:

    fprintf 的文档中,您会看到fprintf 的输出是打印的字节数。所以在这里,fprintf 正在打印 Hi 2 all of youdisp 正在打印 fprintf 返回的 15。

    【讨论】:

    • 我明白了,谢谢。但是你是怎么找到这个文档的?当我使用doc fprintf 时,我找到了这个:de.mathworks.com/help/simulink/slref/fprintf.html
    • @Max 除了 HBHB 所说的:如果你想避免这种行为,请使用 sprintf 而不是 fprintf
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多