为什么 `fprintf/sprintf` 在 `keypressfcn` 上不起作用?

Why is `fprintf/sprintf` not working on `keypressfcn`?

我试图在我的图形打开时将键盘字符键入文本文件,所以我写下了下面的代码。我错过了什么吗? (也试过fprintf)非常感谢

function myGUI()
    h.Mainfrm = figure("position", [200 200 200 200]);
    set(h.Mainfrm, "keypressfcn", @keypressCallback);
endfunction

function keypressCallback(hObject, eventdata)
    data  = eventdata;
    mystr = data.Character;
    fid   = fopen("mytext.txt");

    sprintf("%s" ,mystr)
    fclose(fid);
endfunction

您需要写入文件。

fprintf( fid, '%s', mystr );

大概您使用的是 fprintf 作为 fprintf( '%s', mystr ),它只是写入默认输出,即您的终端。

此外,您正在写入的文件需要以'writable'打开!或者,在您的情况下,由于您似乎想逐个字符地写入并将每个字符附加到文件中,因此您需要使用 'append' 标志打开它:

fid = fopen( 'mytext.txt', 'a');


顺便说一句,因为你打印的只是一个字符串,你根本不需要指定 '%s',直接打印你的字符串:

fprintf( fid, mystr );

如果您还想做一些健全性检查,捕获 fprintf 的输出,它会告诉您有多少字符已保存到文件中。

Output = fprintf( fid, mystr );
if Output == 0; fprintf( 'Nothing written to file\n' ); endif

另外,请注意 fprintf 不会以换行符终止您的字符串。如果你想要一个换行符而你的 mystr 末尾没有,那么你需要明确指定一个,即:

fprintf( fid, '%s\n', mystr );