1

我正在尝试提示用户从图中(情节)中进行选择。当我使用下面的代码运行它时,直到我单击该图后才会显示提示,然后显示提示并且代码继续。事实上,在我选择图形之前,在显示 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;

它工作正常。我不知道这是什么原因,我无法从该位置删除输入请求。

4

1 回答 1

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."
于 2017-12-12T07:52:53.893 回答