我试图提示用户从图中选择(图)。 当我使用下面的代码运行它时,提示不会显示,直到我点击图形,然后显示提示并继续代码。实际上,在我选择数字之前,不会调用在ginput调用之前调用的printf(或disp)。
printf("Select part\n"); % (disp also doesnt work properly)
[xinput,yinput] = ginput(1);
提示的目的是提醒用户移动到图中,因此在选择图形之前自然需要显示。
我可以在两者之间添加额外的冗余输入调用,这会强制printf在控制台中显示。例如输入("按Enter键")。但这是一个不方便的解决方案。
奇怪的是,如果只运行上面的代码,它确实可以正常工作。但是当在程序的其余部分中运行时,它会显示问题。因此调试可能很困难。此外,使用调试器在完整代码中一次运行一行也能正常工作,在选择图形之前显示提示。
只是为了增加混乱。在循环中运行程序的这一部分时,第一个实例不会正确显示提示,但它会工作的每个其他实例。
由于
编辑: 以下代码可靠地失败(对我而言)与我的完整程序失败的方式相同; (再次编辑以简化)
figure(1);
input_test = input("press 1: ");
switch input_test
case 1
while true
clc;
printf("Left click to get coords or right click to finish\n");
[xinput,yinput,mouse_button] = ginput(1)
if mouse_button == 3
break
endif
endwhile
endswitch
它似乎与该行有关;
input_test = input("press 1: ");
如果我用
替换它input_test = 1;
它运作正常。 我不知道这是什么原因,我无法从这个位置删除输入请求。
答案 0 :(得分:0)
谢谢罗杰,你是对的,我确实找到了解决方案。
使用
fflush(stdout)
在'ginput'调用解决问题之前。
在'输入'帮助中找到了这个;
"Because there may be output waiting to be displayed by the pager,
it is a good idea to always call 'fflush (stdout)' before calling
'input'. This will ensure that all pending output is written to
the screen before your prompt."