使用fprintf或sprintf时的值不同

时间:2014-10-08 01:33:37

标签: matlab function printf

我已经在MATLAB中编写了一个函数(我的第一个,所以不能太快判断),它应该根据3个输入参数编写一个批处理文件:

write_BatchFile(setup,engine,np)

此处设置由一个或多个字符串组成,引擎仅包含一个字符串, np 是一个数字,例如:

setup  = {'test1.run';'test2.run';'test3.run'};
engine = 'Engine.exe';
np     = 4; % number of processors/cores

我将省略我的脚本的第一部分,这是更广泛的,但如果有必要,我可以提供整个脚本。无论如何,一旦确定了所有3个参数,它确实成功了,我写了下面的内容,这是我脚本的最后一部分:

%==========================================================================
%   Start writing the batch file
%==========================================================================

tmpstr = sprintf('\nWriting batch file batchRunMPI.bat...');
disp(tmpstr); clear tmpstr;
filename = 'batchRunMPI.bat';
fid      = fopen(filename,'w');

fprintf(fid,'set OMP_NUM_THREADS=1\n');
for i = 1:length(setup);
    fprintf(fid,'mpiexec -n %d -localonly "%s" "%s"\n',np,engine,setup{i});
    fprintf(fid,'move %s.log %s.MPI_%d.log\n',setupname{i},setupname{i},np);
end
fclose all;
disp('Done!');
使用 fileparts

注意 setupname

[~,setupname,setupext] = fileparts(setup);

然而,在查看生成的批处理文件时,我最终获得值52,其中我指示了我的核心数(= 4),例如:

mpiexec -n 52 -localonly "Engine.exe" "test1.run"
mpiexec -n 52 -localonly "Engine.exe" "test2.run"
mpiexec -n 52 -localonly "Engine.exe" "test3.run"

相反,我希望结果为:

mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc

当我检查 np 的值时,它返回 4 ,所以我很困惑这52来自哪里。

我的感觉是它是一个非常简单的解决方案,我只是没有意识到,但到目前为止我还没有找到任何关于此的东西,这就是为什么我会这样做的原因。发布在这里。感谢所有帮助!

-Daniel

1 个答案:

答案 0 :(得分:0)

似乎在某个阶段np正在转换为字符串。字符'4'具有整数值52,它解释了您获得的内容。你有几个选择:

a)找出将np转换为字符串并将其更改的位置

b)%d%s,因此您获得'4'而不是52

c)将np语句的printf部分更改为str2double(np)