2011-01-21 22 views
5

Uczę się Fortran90 po krótkim wprowadzeniu do Fortran77 kilka lat temu. Podczas drukowania liczb całkowitych w Fortranie, musisz określić, ile spacji chcesz zarezerwować na drukowanie liczby całkowitej. Rozważ ten program ...Inteligentne drukowanie liczb całkowitych w fortran90

implicit none 

integer :: i 
i = 123 

write(*, '(A, I3, A)') "'", i, "'" !3 spaces for output = no padding 
write(*, '(A, I5, A)') "'", i, "'" !5 is too many, so output is padded 
write(*, '(A, I2, A)') "'", i, "'" !2 is too few, so output is jibberish 
write(*, '(A, I:, A)') "'", i, "'" !Default behavior 

end program 

... który generuje następujące wyniki.

'123' 
' 123' 
'**' 
'   123' 

Jak przydzielić prawidłową ilość miejsca na drukowanie całkowite, gdy nie wiem, ile cyfr jest w liczbie całkowitej?

Aktualizacja: Jeśli kompilator jest zgodny F95, można użyć deskryptora I0 edycji (tj umieścić '(A, I0, A)' dla drugiego argumentu funkcji write w moim przykładzie powyżej Dzięki @janneb

Odpowiedz

8

Użyj.! deskryptor edycji I0. Cóż, być pedantycznym IIRC, który jest Fortran 95, więc jeśli jesteś naprawdę surowy o nie więcej niż F90, to przypuszczam, że to nie zadziała

+0

Jeśli dobrze rozumiem terminologię, drugie Argumentem każdej z 4 instrukcji 'write' w moim przykładzie jest argument' fmt', z których każdy zawiera 3 deskryptory edycyjne. rect? Tak więc, pytanie nie polega na tym, jak używać deskryptorów, chodzi o to, co umieścić po "Ja". Nie mogę użyć statycznego ciągu znaków dla formatu, ponieważ nie wiem wcześniej, jak długo będą łańcuchy. Czy poprawnie rozumiem twoją odpowiedź, czy też "deskryptor edycji IO" różni się od jakiegokolwiek deskryptora edycji formatu? –

+0

Ups. Początkowo nie rozumiałem twojej reakcji, teraz widzę, że mówisz o określonym deskryptorze edycyjnym. Użyłem "I0" jako deskryptora edycji i zadziałało! Domyślam się, że kompilatory na komputerze, którego używam, są zgodne z F95. Dzięki! –

Powiązane problemy