użyłem FORTRAN trochę, wiele lat temu, a niedawno za zadanie utrzymać starą FORTRAN programu (F77). Poniższy kod nie znał:objaśnienie Fortran domniemanej pętli
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS,
. (BUFFER(BIX), BIX=1, NUM_WORDS)
Przegląd niektóre on-line fora ujawniły, że część, która została mylące mnie, linia kontynuacji, jest implikowana pętla. Ponieważ mój program sprawia mi problemy tutaj, chcę przekonwertować to do konwencjonalnej pętli DO. Konwersja może również pomóc następnemu marnemu slobowi, który podnosi to zimno 5 lat od teraz! W każdym razie, mój najlepszy przypuszczenie na równowartość DO pętli jest
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
DO BIX=1, NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) BUFFER(BIX)
ENDDO
Ale kiedy zrobiłem tylko te zmiany, które zostały przypadki testowe pracujące przestał działać. Wciąż czuł, że to co się dzieje tutaj było dwa różne czyta (pierwszy dostać NUM_WORDS, a drugi do pętli danych), więc spróbował mniej drastyczne zmiany, przekształcając go do dwóch stwierdzeń, ale zachowując dorozumianej pętlę:
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) (BUFFER(BIX), BIX=1, NUM_WORDS)
Ale ta zmiana powoduje również niepowodzenie dobrych przypadków testowych. W obu moich zmianach wartość NUM_WORDS nadchodziła zgodnie z oczekiwaniami, więc wydaje się, że pętla jest tam, gdzie się nie udaje.
Więc, co jest odpowiednikiem DO-pętla dla oryginalnego domniemanych pętli? Czy jestem na niewłaściwym torze?
Dzięki
Dzięki za odpowiedź, janneb. Twoje założenie o otwartym pliku było poprawne; Używam niesformatowanej sekwencji. I z twojej odpowiedzi widzę, że ważniejszą kwestią jest READ i że straciłem kontrolę nad faktem, że czyta ona płytę. – user3617977