好的,所以在我的程序中,我应该从用户那里获取数据文件的名称而不是打开它并阅读内容。但是当我打开并阅读它时,所有字符最终都是******,并且所有整数最终都是0. IDK,如果我正在阅读文件或格式?
该文件将包含以下内容:(其中城市数量是第一个数字)
4
SanDiego
0
350
900
1100
Phoenix
350
0
560
604
Denver
900
560
0
389
Dallas
1100
604
389
0
到目前为止我的代码是这样的,首先我接收第一个数字而不是每个firstnumber * I + I pass应该进入字符数组城市。现在我将其余的数字存储到一个整数数组中,但是真的希望它变成一个名为d_table的整数矩阵,但我想不出在读取时立即这样做的方法。
PROGRAM p4
IMPLICIT NONE
INTEGER :: number, status, I, J, K, permutation = 0, distance = 0, distance = 999999
CHARACTER(50) :: filename ! Filenames longer than 50 are truncated
CHARACTER(20), DIMENSION(10) :: city
INTEGER, DIMENSION(100) :: temp
INTEGER, DIMENSION(10,10) :: d_table
INTEGER, DIMENSION(10) :: path, best_path
WRITE (*, '(1x,A)', ADVANCE="NO") "Enter filename: "
READ *, filename
! Open the file we created and read the contents
OPEN(UNIT=15, FILE=filename, STATUS="OLD", ACTION="READ",&
IOSTAT=status)
IF(status /= 0) THEN
PRINT *, "ERROR, could not open file for reading."
STOP
END IF
READ (UNIT=15, FMT = 100, IOSTAT=status) number
J = 0
K = 0
DO I = 0, number*number
IF(I == J*number+J) THEN
READ (UNIT=15, FMT = 200, IOSTAT=status) city(J)
J = J + 1
ELSE
READ (UNIT=15, FMT = 100, IOSTAT=status) temp(K)
K = K + 1
END IF
END DO
K = 0
DO I = 0, number
DO J = 0, number
d_table(I,J) = temp(K)
K = K + 1
END DO
END DO
100 FORMAT(I6)
200 FORMAT (A)
END PROGRAM p4
答案 0 :(得分:1)
这一行
DO I = 0, number*number
对我来说很难看;循环将执行17次。当然你想阅读5行的number
组,每组是一个城市名称,后跟四个整数?这对于一个小循环嵌套来说是一个很好的例子,比如
do ix = 1, number
read(15,*) city(ix)
do jx = 1, 4
read(15,*) d_table(ix,jx)
end do
end do
鉴于这样一个简单的输入文件格式,不需要打扰格式语句,列表导向输入将正常工作。
我无法看到代码所做的所有索引算法的重点,也许我错过了一些东西。