2017-12-12 24 views
1

사용자가 그림 (플롯)에서 선택하라는 메시지를 표시하려고합니다. 아래 코드를 실행하면 그림을 클릭 할 때까지 프롬프트가 표시되지 않습니다. 그 후에 프롬프트가 표시되고 코드가 계속됩니다. 사실, 그림을 선택할 때까지 ginput 호출 전에 호출되는 printf (또는 disp)에 대한 호출이 표시되지 않습니다.ginput 다음에 옥타브 printf가 출력되지 않습니다.

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 = 1; 

와 이것을 대체 할 경우

input_test = input("press 1: "); 

는 제대로 작동합니다. 이유가 무엇인지 알 수 없으며이 위치에서 입력 요청을 제거 할 수 없습니다.

+0

'printf' 줄 다음에'pause (0.01)'를 시도하십시오. –

+0

실제로 동작을 보여주는 최소한의 예제를 만들어보십시오. 그렇게하면 도움을 얻을 수있는 기회가 늘어납니다. 또한 종종 문제를 직접 찾아서 해결할 수 있습니다. –

+0

Sardar에게 감사드립니다. 일시 중지는 내가 시도한 첫 번째 작업 이었지만 작동하지 않았다. – Dominic

답변

0

감사합니다. Roger, 맞았습니다. 해결책을 찾았습니다. 'ginput'호출하기 전에

fflush(stdout) 

를 사용

문제를 해결합니다.

'입력'도움말에서이 내용을 찾을 수 있습니다.

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