Fortran - อินพุตเอาต์พุตพื้นฐาน
เราได้เห็นแล้วว่าเราสามารถอ่านข้อมูลจากแป้นพิมพ์โดยใช้ไฟล์ read * และแสดงผลลัพธ์ไปยังหน้าจอโดยใช้ไฟล์ print*คำสั่งตามลำดับ รูปแบบของอินพุต - เอาต์พุตนี้คือfree format I / O และเรียกว่า list-directed อินพุต - เอาต์พุต
I / O แบบง่ายรูปแบบฟรีมีรูปแบบ -
read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...
อย่างไรก็ตาม I / O ที่จัดรูปแบบจะช่วยให้คุณมีความยืดหยุ่นมากกว่าในการถ่ายโอนข้อมูล
อินพุตเอาต์พุตที่จัดรูปแบบ
อินพุตเอาต์พุตที่จัดรูปแบบมีไวยากรณ์ดังนี้ -
read fmt, variable_list
print fmt, variable_list
write fmt, variable_list
ที่ไหน
fmt คือข้อกำหนดรูปแบบ
รายการตัวแปรคือรายการของตัวแปรที่จะอ่านจากแป้นพิมพ์หรือเขียนบนหน้าจอ
ข้อกำหนดรูปแบบกำหนดวิธีการแสดงข้อมูลที่จัดรูปแบบ ประกอบด้วยสตริงที่มีรายการedit descriptors ในวงเล็บ
อัน edit descriptor ระบุรูปแบบที่แน่นอนเช่นความกว้างตัวเลขหลังจุดทศนิยมเป็นต้นซึ่งจะแสดงอักขระและตัวเลข
ตัวอย่างเช่น
Print "(f6.3)", pi
ตารางต่อไปนี้อธิบายถึงตัวบ่งชี้ -
ตัวบอก | คำอธิบาย | ตัวอย่าง |
---|---|---|
ผม | ใช้สำหรับเอาต์พุตจำนวนเต็ม ซึ่งจะอยู่ในรูปแบบ 'rIw.m' โดยที่ความหมายของ r, w และ m ได้รับในตารางด้านล่าง ค่าจำนวนเต็มเป็นค่าที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนเต็มดังนั้น fi eld จะถูกยกด้วยเครื่องหมายดอกจัน |
พิมพ์ "(3i5)", i, j, k |
ฉ | ใช้สำหรับเอาต์พุตจำนวนจริง ซึ่งจะอยู่ในรูปแบบ 'rFw.d' โดยที่ความหมายของ r, w และ d แสดงไว้ในตารางด้านล่าง คุณค่าที่แท้จริงเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนจริงเครื่องหมาย fi eld จะขึ้นด้วยเครื่องหมายดอกจัน |
พิมพ์ "(f12.3)", pi |
จ | ใช้สำหรับเอาต์พุตจริงในสัญกรณ์เอกซ์โพเนนเชียล คำสั่ง descriptor 'E' อยู่ในรูปแบบ 'rEw.d' โดยที่ความหมายของ r, w และ d ได้รับในตารางด้านล่าง คุณค่าที่แท้จริงเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนจริงเครื่องหมาย fi eld จะขึ้นด้วยเครื่องหมายดอกจัน โปรดทราบว่าในการพิมพ์จำนวนจริงที่มีทศนิยมสามตำแหน่งจำเป็นต้องมีความกว้าง fi eld อย่างน้อยสิบตำแหน่ง หนึ่งสำหรับสัญลักษณ์ของแมนทิสซาสองสำหรับศูนย์สี่สำหรับแมนทิสซาและสองสำหรับเลขชี้กำลังเอง โดยทั่วไป w ≥ d + 7 |
พิมพ์ "(e10.3)", 123456.0 ให้ '0.123e + 06' |
ES | ใช้สำหรับผลลัพธ์จริง (สัญกรณ์วิทยาศาสตร์) ซึ่งจะอยู่ในรูปแบบ 'rESw.d' ซึ่งความหมายของ r, w และ d จะได้รับในตารางด้านล่าง ตัวบ่งชี้ 'E' ที่อธิบายไว้ข้างต้นมีความแตกต่างจากสัญกรณ์ 'Scienti fi c' แบบดั้งเดิมที่รู้จักกันดีเล็กน้อย สัญกรณ์ Scienti fi c มี mantissa อยู่ในช่วง 1.0 ถึง 10.0 ซึ่งแตกต่างจาก E descriptor ซึ่งมี mantissa อยู่ในช่วง 0.1 ถึง 1.0 คุณค่าที่แท้จริงเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนจริงเครื่องหมาย fi eld จะขึ้นด้วยเครื่องหมายดอกจัน นอกจากนี้ความกว้าง fi eld ต้องตรงตามนิพจน์ w ≥ d + 7 |
พิมพ์ "(es10.3)", 123456.0 ให้ '1.235e + 05' |
ก | ใช้สำหรับเอาต์พุตอักขระ ซึ่งจะอยู่ในรูปแบบ 'rAw' โดยที่ความหมายของ r และ w แสดงไว้ในตารางด้านล่าง ประเภทของตัวละครเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา หากความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับสตริงอักขระดังนั้น fi eld จะถูกเพิ่มด้วยอักขระ fi rst 'w' ของสตริง |
พิมพ์ "(a10)", str |
X | ใช้สำหรับเอาต์พุตช่องว่าง ซึ่งจะอยู่ในรูปแบบ 'nX' โดยที่ 'n' คือจำนวนช่องว่างที่ต้องการ |
พิมพ์ "(5x, a10)", str |
/ | Slash descriptor - ใช้เพื่อแทรกบรรทัดว่าง สิ่งนี้จะอยู่ในรูปแบบ '/' และบังคับให้เอาต์พุตข้อมูลถัดไปอยู่ในบรรทัดใหม่ |
พิมพ์ "(/, 5x, a10)", str |
สัญลักษณ์ต่อไปนี้ใช้กับตัวบอกรูปแบบ -
ซีเนียร์ No | สัญลักษณ์และคำอธิบาย |
---|---|
1 | c หมายเลขคอลัมน์ |
2 | d จำนวนหลักทางขวาของตำแหน่งทศนิยมสำหรับอินพุตหรือเอาต์พุตจริง |
3 | m จำนวนหลักขั้นต่ำที่จะแสดง |
4 | n จำนวนช่องว่างที่จะข้าม |
5 | r จำนวนครั้งที่ทำซ้ำ - จำนวนครั้งที่จะใช้ตัวบอกหรือกลุ่มตัวบอก |
6 | w ความกว้างของฟิลด์ - จำนวนอักขระที่จะใช้สำหรับอินพุตหรือเอาต์พุต |
ตัวอย่าง 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
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
The product details are
Name: Id: Weight:
Ardupilot 1 0.08