2013-06-19 3 views
0

Я создаю базовую программу в Silverfrost FTN5, в которой я ввожу целое число от пользователя.
Если пользователь вводит значение поплавка, он выдает ошибку и программа заканчивается. Есть ли способ обработать этот недопустимый ввод и попросить пользователя ввести действительный ввод?Несоответствие типа пользовательского ввода в FORTRAN

ответ

2

Существует несколько способов. 1) Прочитайте ввод в строке и проанализируйте строку. Если строка содержит период, отклоните ее и повторно запросите для ввода. Если строка отображается корректно, выполните внутреннее чтение целого из строки: read (string, *) IntVal. 2) Более надежный, поскольку это изящно обнаруживает все ошибки: используйте ключевое слово IOSTAT= в своем заявлении на чтение. Если значение отличное от нуля, произошла ошибка ... повторите запрос для ввода.

EDIT: Пример кода:

program TestRead 

integer :: number, ReadStatus 

write (*, '("Input integer: ")', advance="no") 
ReadInt: do 
    read (*, *, iostat=ReadStatus) number 
    if (ReadStatus == 0) then 
     exit ReadInt 
    else 
     write (*, '(/ "READ ERROR: please re-input:")') 
    end if 
end do ReadInt 

write (*, '(/ "Value read: ", I0)') number 

end program TestRead 
+0

вы можете объяснить, как использовать IOSTAT для этого приложения? – tumchaaditya

+0

стоит отметить, подход 1 имеет большое преимущество в том, что вы можете видеть/обрабатывать любую недействительную вещь, введенную пользователем. Пусть они набирают «abort», чтобы выйти изящно, например. – agentp

Смежные вопросы