3

我正在尝试在 matlab 上使用 fprintf 编写一个文本文件。我使用一个 for 循环:

fID = fopen('fileName','w');
fSpec = cat(2,repmat('%s', 1, 3),'\n');
for k=1:10
    to_write = [num2str(k) ',' num2str(k*k)];
    fprintf(fID, fSpec, to_write);
end
fclose(fID);

写入一个文件,但仅在一行上。我尝试用 gedit 和 matlab 打开它。

怎么了?

4

2 回答 2

4

您的格式说明符有些奇怪。 to_write将是一个纯字符串,那么为什么要将 fSpec 构造为%s%s%s\n

如果您想要每个循环一行,您可以简单地执行以下操作:

for k=1:10
    to_write = [num2str(k) ',' num2str(k*k)];
    fprintf(fID, '%s\n', to_write);
end

编辑:

如果%s%s%s\n设计为匹配[num2str(k) ',' num2str(k*k)]: 中的三个字符串,则没有必要。的结果[num2str(k) ',' num2str(k*k)]将只是一个字符串 - 因此您只需要一个'%s'格式说明符,而不是三个。

于 2013-10-15T12:59:32.637 回答
0

我能够在您的代码中找到两件小事。

首先,您想在写完每一行后按回车键,因此\n. 其次,你试图写一个字符串值 using ,fprint因为你正在使用%s,我认为将其更改为%d解决它!

所以更新后的代码应该是:

fID = fopen('fileName','w');
fSpec = cat(2,repmat('%d', 1, 3),'\n');
for k=1:10
    to_write = [num2str(k) ',' num2str(k*k)];
    fprintf(fID, fSpec, to_write);
end

fclose(fID);
于 2013-10-15T12:59:18.760 回答