До сих пор мы видели, что мы можем читать данные с клавиатуры, используя оператор read * , и отображать вывод на экран, используя оператор print * , соответственно. Эта форма ввода-вывода является вводом-выводом произвольного формата и называется направленным на ввод-вывод списком .
Свободный формат простого ввода / вывода имеет вид —
read(*,*) item1, item2, item3... print *, item1, item2, item3 write(*,*) item1, item2, item3...
Однако форматированный ввод / вывод дает вам больше гибкости по сравнению с передачей данных.
Форматированный ввод-вывод
Форматированный ввод-вывод имеет следующий синтаксис:
read fmt, variable_list print fmt, variable_list write fmt, variable_list
Куда,
-
fmt — спецификация формата
-
переменная-список представляет собой список переменных, которые будут считаны с клавиатуры или записаны на экране
fmt — спецификация формата
переменная-список представляет собой список переменных, которые будут считаны с клавиатуры или записаны на экране
Спецификация формата определяет способ отображения форматированных данных. Он состоит из строки, содержащей список дескрипторов редактирования в скобках.
Дескриптор редактирования указывает точный формат, например, ширину, цифры после десятичной точки и т. Д., В которых отображаются символы и цифры.
Например
Print "(f6.3)", pi
Следующая таблица описывает дескрипторы —
дескриптор | Описание | пример |
---|---|---|
я |
Это используется для целочисленного вывода. Это принимает форму «rIw.m», где значения r, w и m приведены в таблице ниже. Целочисленные значения правильно выровнены в своих полях. Если ширина поля не достаточно велика, чтобы вместить целое число, то поле заполняется звездочками. |
печать «(3i5)», i, j, k |
F |
Это используется для вывода действительного числа. Это принимает форму ‘rFw.d’, где значения r, w и d приведены в таблице ниже. Реальные ценности оправданы в своих областях. Если ширина поля недостаточно велика, чтобы вместить действительное число, то поле заполняется звездочками. |
печать «(f12.3)», пи |
Е |
Это используется для реального вывода в экспоненциальной записи. Оператор дескриптора ‘E’ принимает форму ‘rEw.d’, где значения r, w и d приведены в таблице ниже. Реальные ценности оправданы в своих областях. Если ширина поля недостаточно велика, чтобы вместить действительное число, то поле заполняется звездочками. Обратите внимание, что для распечатывания действительного числа с тремя десятичными знаками необходима ширина поля не менее десяти. Один для знака мантиссы, два для нуля, четыре для мантиссы и два для самого показателя. В общем, w ≥ d + 7. |
выведите «(e10.3)», 123456.0 дает «0.123e + 06» |
ES |
Это используется для реального результата (научная запись). Это принимает форму ‘rESw.d’, где значения r, w и d приведены в таблице ниже. Описанный выше «E» дескриптор несколько отличается от традиционного общеизвестного «научного обозначения». Научная нотация имеет мантиссу в диапазоне от 1,0 до 10,0 в отличие от дескриптора E, который имеет мантиссу в диапазоне от 0,1 до 1,0. Реальные ценности оправданы в своих областях. Если ширина поля недостаточно велика, чтобы вместить действительное число, то поле заполняется звездочками. Здесь также поле ширины должно удовлетворять выражению w ≥ d + 7 |
выведите «(es10.3)», 123456.0 дает «1.235e + 05» |
Это используется для вывода символов. Это принимает форму ‘rAw’, где значения r и w приведены в таблице ниже. Типы символов правильны в своих полях. Если ширина поля недостаточно велика, чтобы вместить строку символов, то поле заполняется первыми символами ‘w’ строки. |
печать «(а10)», ул | |
Икс |
Это используется для вывода пространства. Это принимает форму ‘nX’, где ‘n’ — количество желаемых пробелов. |
печать «(5х, а10)», ул |
/ |
Дескриптор косой черты — используется для вставки пустых строк. Это принимает форму ‘/’ и заставляет следующий вывод данных быть в новой строке. |
печать «(/, 5х, а10)», стр |
Это используется для целочисленного вывода. Это принимает форму «rIw.m», где значения r, w и m приведены в таблице ниже. Целочисленные значения правильно выровнены в своих полях. Если ширина поля не достаточно велика, чтобы вместить целое число, то поле заполняется звездочками.
Это используется для вывода действительного числа. Это принимает форму ‘rFw.d’, где значения r, w и d приведены в таблице ниже. Реальные ценности оправданы в своих областях. Если ширина поля недостаточно велика, чтобы вместить действительное число, то поле заполняется звездочками.
Это используется для реального вывода в экспоненциальной записи. Оператор дескриптора ‘E’ принимает форму ‘rEw.d’, где значения r, w и d приведены в таблице ниже. Реальные ценности оправданы в своих областях. Если ширина поля недостаточно велика, чтобы вместить действительное число, то поле заполняется звездочками.
Обратите внимание, что для распечатывания действительного числа с тремя десятичными знаками необходима ширина поля не менее десяти. Один для знака мантиссы, два для нуля, четыре для мантиссы и два для самого показателя. В общем, w ≥ d + 7.
Это используется для реального результата (научная запись). Это принимает форму ‘rESw.d’, где значения r, w и d приведены в таблице ниже. Описанный выше «E» дескриптор несколько отличается от традиционного общеизвестного «научного обозначения». Научная нотация имеет мантиссу в диапазоне от 1,0 до 10,0 в отличие от дескриптора E, который имеет мантиссу в диапазоне от 0,1 до 1,0. Реальные ценности оправданы в своих областях. Если ширина поля недостаточно велика, чтобы вместить действительное число, то поле заполняется звездочками. Здесь также поле ширины должно удовлетворять выражению w ≥ d + 7
Это используется для вывода символов. Это принимает форму ‘rAw’, где значения r и w приведены в таблице ниже. Типы символов правильны в своих полях. Если ширина поля недостаточно велика, чтобы вместить строку символов, то поле заполняется первыми символами ‘w’ строки.
Это используется для вывода пространства. Это принимает форму ‘nX’, где ‘n’ — количество желаемых пробелов.
Дескриптор косой черты — используется для вставки пустых строк. Это принимает форму ‘/’ и заставляет следующий вывод данных быть в новой строке.
Следующие символы используются с дескрипторами формата —
Sr.No | Символ и описание |
---|---|
1 |
с Номер колонки |
2 |
d Количество цифр справа от десятичного разряда для реального ввода или вывода |
3 |
м Минимальное количество отображаемых цифр |
4 |
N Количество пропущенных пробелов |
5 |
р Количество повторов — количество раз, чтобы использовать дескриптор или группу дескрипторов |
6 |
вес Ширина поля — количество символов, используемых для ввода или вывода |
с
Номер колонки
d
Количество цифр справа от десятичного разряда для реального ввода или вывода
м
Минимальное количество отображаемых цифр
N
Количество пропущенных пробелов
р
Количество повторов — количество раз, чтобы использовать дескриптор или группу дескрипторов
вес
Ширина поля — количество символов, используемых для ввода или вывода
Пример 1
program printPi pi = 3.141592653589793238 Print "(f6.3)", pi Print "(f10.7)", pi Print "(f20.15)", pi Print "(e16.4)", pi/100 end program printPi
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
3.142 3.1415927 3.141592741012573 0.3142E-01
Пример 2
program printName implicit none character (len = 15) :: first_name print *,' Enter your first name.' print *,' Up to 20 characters, please' read *,first_name print "(1x,a)",first_name end program printName
Когда приведенный выше код компилируется и выполняется, он дает следующий результат: (предположим, что пользователь вводит имя Zara)
Enter your first name. Up to 20 characters, please Zara
Пример 3
program formattedPrint implicit none real :: c = 1.2786456e-9, d = 0.1234567e3 integer :: n = 300789, k = 45, i = 2 character (len=15) :: str="Tutorials Point" print "(i6)", k print "(i6.3)", k print "(3i10)", n, k, i print "(i10,i3,i5)", n, k, i print "(a15)",str print "(f12.3)", d print "(e12.4)", c print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d end program formattedPrint
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
45 045 300789 45 2 300789 45 2 Tutorials Point 123.457 0.1279E-08 n = 300789 d = *******
Заявление о формате
Оператор формата позволяет смешивать и сопоставлять символьные, целые и реальные выходные данные в одном операторе. Следующий пример демонстрирует это —
program productDetails implicit none character (len = 15) :: name integer :: id real :: weight name = 'Ardupilot' id = 1 weight = 0.08 print *,' The product details are' print 100 100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:') print 200, name, id, weight 200 format(1x, a, 2x, i3, 2x, f5.2) end program productDetails
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —