接下来是ginput时,不会输出Octave printf

时间:2017-12-12 05:13:32

标签: printf octave ginput

我试图提示用户从图中选择(图)。 当我使用下面的代码运行它时,提示不会显示,直到我点击图形,然后显示提示并继续代码。实际上,在我选择数字之前,不会调用在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;

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

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."