Matlab 使用fprintf或sprintf时的不同值

Matlab 使用fprintf或sprintf时的不同值,matlab,function,printf,Matlab,Function,Printf,我在MATLAB中编写了一个函数(我的第一个,所以不要太快下结论),它应该基于3个输入参数编写一个批处理文件: 写入批处理文件(设置、引擎、np) 此处,setup由一个或多个字符串组成,engine仅由一个字符串组成,np是一个数字,例如: setup = {'test1.run';'test2.run';'test3.run'}; engine = 'Engine.exe'; np = 4; % number of processors/cores 我将省略脚本的第一部分,这部分

我在MATLAB中编写了一个函数(我的第一个,所以不要太快下结论),它应该基于3个输入参数编写一个批处理文件:

写入批处理文件(设置、引擎、np)

此处,setup由一个或多个字符串组成,engine仅由一个字符串组成,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!');
注意设置名称使用文件部分紧跟其后:

[~,setupname,setupext] = fileparts(setup);
然而当查看生成的批处理文件时,我最终得到了值52,其中我指示了我的核心数(=4),例如:

相反,我希望结果是:

mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc
当我检查np的值时,它返回4,所以我不知道这52是从哪里来的

我的感觉是,这是一个非常简单的解决方案,我只是不知道,但我还没有找到任何关于这一点,这就是为什么我在这里张贴。感谢您的帮助


-Daniel

似乎在某个阶段,
np
正在转换为字符串。字符
'4'
具有整数值
52
,这解释了您得到的结果。您有几个选择:

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

b) 将
%d
转换为
%s
,因此您得到的是
'4'
而不是
52


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

谢谢您如此快速的回复!关于转换为字符串,您是对的,使用您的建议(str2double)对其进行更改可以使其正常工作。所以我写了一篇内容如此广泛的文章来获得如此简单的答案。再次感谢!
mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc