!使用字符串来描述格式
PROGRAM hw
IMPLICIT NONE
CHARACTER(LEN=128)::str_format !!!highlight
INTEGER::num_i=21
REAL::num_r=3.1415926
str_format='("The Result for iteration",I3," is",F8.5)'
WRITE(*,str_format) num_i,num_r
END PROGRAM
!例子, 下面这个程序提示用户输入一个数据,然后回显至显示器, 在数字两端没有多余的空格
PROGRAM hw_format
IMPLICIT NONE
CHARACTER(LEN=32)::FORMAT_REAL
INTEGER::IO_state
CHARACTER(LEN=128)::IO_msg
CHARACTER(LEN=128)::str_format
INTEGER::num_decimals=6
REAL::num_r=6.021245
WRITE(*,*) 'Enter a real number:'
IO_state=-1
IO_msg=''
DO
READ(*,*,IOSTAT=IO_state,IOMSG=IO_msg) num_r
IF(IO_state==0) EXIT
WRITE(*,*) TRIM(ADJUSTL(IO_msg))
WRITE(*,*) 'Correct your input:'
END DO
WRITE(*,'('//'"The number you entered is ", '//FORMAT_REAL(num_r,num_decimals)//'". These words following the number you just inputed."'//')') num_r
END PROGRAM hw_format
FUNCTION FORMAT_REAL(x,d)
IMPLICIT NONE
REAL,INTENT(IN)::x ! the number needed to be formated
INTEGER,INTENT(IN)::d ! number of dicimals
CHARACTER(LEN=32)::FORMAT_REAL
CHARACTER(LEN=32)::temp_format
! 0<abs(x)<0.1 abs(x)>=10.0
IF((ABS(x)>0 .AND. ABS(x)<0.1) .OR. (ABS(x)>=10.0)) THEN
IF(x>0) THEN
WRITE(temp_format,*) 'ES',6+d,'.',d
ELSE
WRITE(temp_format,*) 'ES',7+d,'.',d
END IF
ELSE
IF(x>0) THEN
WRITE(temp_format,*) 'F',d+2,'.',d
ELSE
WRITE(temp_format,*) 'F',d+3,'.',d
END IF
END IF
FORMAT_REAL=temp_format
END FUNCTION FORMAT_REAL