2014-04-10 2 views
1

여러 위치에서 사용하는 do while 루프를 종료할지 여부를 결정하는 긴 조건문이 있습니다. 그것은 그렇게하는 등의 변수를 추가해야 좋은에 하지서브 루틴을 사용하여 Fortran에서 do while 루프를 종료하십시오.

call check_for_exit 

:

if (long_class_name <= something + 0.5 .and. & 
    long_class_name >= something - 0.5 .and. & 
    long_class_name <= some_other_thing + 0.5 .and. & 
    long_class_name >= some_other_thing - 0.5 .and. & 
    yet_another_thing == -999.0) exit 

는 방법처럼, 포트란 서브 루틴이나 함수를 통해 exit 문이 돌아가요 (예를 들어, 내가 다음에 if 간단 할 것을, 함수에서 논리를 반환) :

exit_now = check_exit() 
if (exit_now == .true.) exit 
+2

플래그 변수를 사용하는 것은 꽤 표준적인 패턴입니다. 나중에 코드를보다 유연하게 만들 수 있으며 디버그 중에 로직을 조작 할 수 있습니다. –

답변

1

이유는 단순히 귀하의 예와 같은 논리 함수를 사용하고 추가 변수없이 직접 테스트하십시오.

if (check_exit()) exit 

또는 정수를 사용하려면 다음과 같이하십시오. 음의 정수는 오류를 나타내며 긍정적 인 사람은 경고이며이 비록

if (complicated_check() > 0) then 
    print *, 'WARNING' 
elseif(complicated_check() < 0) then 
    exit 
endif 

없이 비효율적지기 시작한다 보조 변수 ;-)

+0

나는 Shawn C가 깃발을 사용하는 것이 옳다고 생각합니다. 좋은 대답. 나는이 시나리오를 가지고 어떤 시나리오에서 가장 좋은 것이 무엇인지 이해하기 위해 좀 더 놀아야 할 필요가 있다고 생각한다. 감사. – ryanjdillon

0

는 F90을 가정, 여러 반환 값을 처리 할 + 당신이 select case를 사용할 수 있는지 보조 변수 피하기 (또는 함수를 두 번 호출하는 것)

select case (complicated_check()) 
    case (1:) 
    print*,'Warning' 
    case (:-1) 
    exit 
end select 
+0

감사합니다 !! 답변을 수정했습니다 .. – agentp

관련 문제