【问题标题】:Why isn't my sprintf working in matlab?为什么我的 sprintf 不能在 matlab 中工作?
【发布时间】:2012-04-20 04:54:34
【问题描述】:

我对编程完全陌生,不知道自己在做什么。我整天都在试图让 sprintf 命令工作。如果我理解正确,我需要初始化我希望它写入的文件,如下所示:

recalltest = strcat('DRMRecall_',num2str(subNo),'.log');
fopen(recalltest, 'wt');
if recalltest == -1
    error('Error opening log file');
end

然后,定义我想写入文件的变量:

    recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1);

然后我尝试将该变量写入我的日志文件:

sprintf(recalltest, '%s,', recall1);
fclose('all');

每一个之间都有很多东西,但我希望这些都是相关的部分。日志文件被创建,但无论我做什么,我都无法写入任何内容。我做错了什么?

【问题讨论】:

    标签: matlab printf


    【解决方案1】:

    sprintf 将数据格式化为字符串;我很惊讶代码完全运行。您希望fprintf 输出到文件。

    【讨论】:

    • 当我使用 fprintf 时没有任何变化。
    【解决方案2】:

    对代码的一些修复:

    % 测试代码。

    recalltest = strcat('DRMRecall_',num2str(subNo),'.log');
    FileID = fopen(recalltest, 'wt');
    if FileID == -1
        error('Error opening log file');
    end
    

    % 测试代码结束。

    % 这是你的GetEchoString 函数调用。如果这段代码失败,原因可能是在这个函数调用或函数本身。

    % 未测试的代码。

    recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1);
    

    % 未测试的代码结束。

    您的fprintf 调用中有'%s,',它在字符串recall1 之后打印,。 如果这是您的目的,请将, 放回下一个代码行。但您也可以在打印前使用strcat 将其添加到recall1

    % 测试代码。

    fprintf(FileID, '%s', recall1);
    fclose(FileID);
    

    % 测试代码结束。

    通常您可以使用fprintf 进行所有打印,包括文件和屏幕。要打印到文件,fprintf 函数调用中的第一个参数必须是 FileID,在 MATLAB 文档和其他地方通常称为 fidFileIDfid不是文件名,它只是fopen返回的一个数字,它只在fopen和相关的fclose之间有效。它不是与特定文件或文件内容相关的常量,因此您必须始终存储 fopen 的返回值才能读取或写入文件。

    sprintf 不会在任何地方打印任何东西,既不会打印到屏幕上也不会打印到任何文件,它只会将数据格式化为字符串,正如sprintf 文档中所说的那样。 sprintf输出(第一个返回值,第二个是err)可以使用disp打印到屏幕上。

    【讨论】:

      【解决方案3】:
      recalltest = sprintf('DRMRecall_%d.log', subNo); % usage of sprintf to create a string
      fid = fopen(recalltest, 'wt');
      assert(fid ~= -1, 'Error opening log file'); % save if...
      recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1);
      fprintf(fid, '%s\n', recall1); % usage of fprintf to write to a file
      fclose(fid);
      

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 2017-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 2012-01-13
        相关资源
        最近更新 更多