สวัสดีและยินดีต้อนรับกลับ
ในการบรรยายนี้ ฉันจะสาธิตการท้าทายครั้งก่อนของเรา ซึ่งก็คือการพิมพ์เนื้อหาของไฟล์ในลำดับที่กลับกัน
ดังนั้น คุณจะต้องเข้าใจวิธี ftel และวิธี fseek
มาสร้างบล็อคโค้ด และสร้างโปรเจ็กต์ใหม่กัน
และโปรเจ็กต์นี้จะเป็นแอปพลิเคชันคอนโซล
เราจะตั้งชื่อมันว่าพิมพ์เนื้อหาไฟล์ในทางกลับกัน
และขั้นแรกเราจะสร้างไฟล์ของเราที่มีข้อมูลว่างอยู่เพราะเราต้องอ่านจากมัน
ฉันจะกลับไปที่ไดเร็กทอรีดาวน์โหลดของฉัน
ซึ่งเป็นที่ที่โปรเจ็กต์บล็อกโค้ดของฉันอยู่
และฉันจะไปที่โปรเจ็กต์ที่เพิ่งสร้าง
ซึ่งมีชื่อว่าเนื้อหาไฟล์พิมพ์
มันเลยอยู่ตรงนี้ ฉันจะสร้างไฟล์ใหม่ ไฟล์ข้อความ
เราจะบอกว่าเอกสารข้อความใหม่ เราจะตั้งชื่อมันว่าการทดสอบ ข้อความ.
แล้วข้างในนี้ ฉันจะทำตามปกติ
สวัสดี ฉันชื่อเจสัน
สบายดีไหม ฉันสบายดี
และสิ่งนี้จะทำอย่างไร ฉันจะบันทึกไว้ จากนั้นเราจะเริ่มพิมพ์ตอนจบ
ดังนั้นควรพิมพ์ enif space gniod และอื่น ๆ จนกว่าจะถึงจุดเริ่มต้น
ดังนั้น เราจะกลับไปที่บล็อคโค้ด และเราจำเป็นต้องรวม
IO มาตรฐานของเราด้วย เพราะนั่นประกอบด้วยฟังก์ชันทั้งหมดของเรา
เราจะสร้างค่าคงที่
ในกรณีนี้ กำหนด
และนี่จะเรียกว่าชื่อไฟล์ มันถูกเรียกว่าการทดสอบ ข้อความ.
และฉันจะต้องสร้างตัวชี้ไฟล์ก่อน ดังนั้นตัวพิมพ์ใหญ่ทั้งหมด FILE
star fp และฉันจะตั้งค่าให้เท่ากับ null เริ่มต้นมัน
แล้วฉันก็จะสร้างตัวนับสองสามตัวและบางอย่างเพื่อแทนค่าที่คืนมาจาก
-- ฉันจะถือตัวนับสำหรับลูปของฉันแล้วนับจำนวนไบต์จริงที่ส่งคืนจาก ftell
ฉันจะบอกว่ามันนับเท่ากับศูนย์ แล้วจากนั้นตัวแปรควบคุมแบบวนรอบเข้าไปเป็น
I เท่ากับศูนย์
ฉันจะทำตามปกติ ฉันต้องเปิดไฟล์. ฉันจะบอกว่า fp เท่ากับ
fopen และฉันจะส่งผ่านชื่อไฟล์ ฉันจะผ่านการอ่านเท่านั้นดังนั้นเพียงแค่ r
ฉันจะทำให้แน่ใจว่านี่ไม่ใช่โมฆะ ผมจะบอกว่าถ้า fp เท่ากับ null
ผมจะคืนค่าเป็นลบ 1
มิฉะนั้น ฉันจะไปหาที่ส่วนท้ายของไฟล์
เลยอยากทำ fseek
ฉันจะเรียกใช้ฟังก์ชัน fseek
นี่จะเปลี่ยนตำแหน่งที่ฉันชี้ไป ฉันจะผ่านตัวชี้ไฟล์ของฉัน
ฉันจะผ่านศูนย์สำหรับพารามิเตอร์ที่สองของเรา
สำหรับพารามิเตอร์ที่สาม ฉันจะบอกว่าพยายามไปให้สุด
ฉันจะใช้การแสวงหาคงที่นั้น
และนั่นจะตั้งค่าตัวชี้ไฟล์ของฉันไปที่จุดสิ้นสุดของ fp ซึ่งเป็นการทดสอบ
ข้อความ.
เมื่อฉันถึงจุดสิ้นสุด ฉันต้องการตั้งค่าตัวนับจริงของฉันเป็นสิ่งที่ชี้ไปที่
ftell ฉันก็เลยอยากกลับไปในที่ที่ฉันอยู่
ที่นี่ฉันจะได้ตำแหน่งของตัวชี้ไฟล์
และ fseek ก็เปลี่ยนตำแหน่ง ดังนั้นมันจึงย้ายตัวชี้ไฟล์ไปที่ท้ายไฟล์
ดังนั้นฉันจึงย้ายมันก่อนแล้วจึงได้ตำแหน่ง ฉันสามารถรับตำแหน่งโดยใช้ ftell
สำหรับ ftell มันจะส่งคืนตำแหน่ง ดังนั้นมันจะถูกเก็บไว้ในการนับ
และฉันจะบอกว่า f count เท่ากับ f tell แล้วส่งต่อในตัวชี้ไฟล์
เมื่อฉันมีตำแหน่งแล้ว ฉันสามารถเขียนลูป while
ที่บอกว่าไปจากตำแหน่งหรือตัวนับซึ่งเป็นตัวแปรควบคุมลูปของฉันไปจนสุดทาง
ดังนั้นในที่นี้ ฉันสามารถพูดได้ในขณะที่ฉันยังน้อยกว่าการนับ เพราะโดยพื้นฐานแล้วฉันต้องการอ่านทุกอย่างตั้งแต่ต้นจนจบ
และข้างในนี้ ฉันอยากจะบอกว่า เพิ่มตัวแปร I ของฉัน
แล้วฉันก็ต้องการที่จะแสวงหา ฉันต้องการเปลี่ยนที่ที่ฉันจะย้ายไป ฉันต้องการจะพูดว่า fseek และฉันต้องการชี้ไปที่
fp
ฉันต้องการชี้ไปที่แง่ลบเพราะฉันจะไปจากด้านหลังไปยังจุดเริ่มต้นและฉันต้องการบอกว่าแสวงหาจุดจบ
ลบแล้วฉันจะเหลือไบต์จำนวนมากจากจุดสิ้นสุด
อย่างแรกเลย ฉันสามารถเลื่อนดูจนจบได้ จากนั้นฉันต้องการเปลี่ยนตำแหน่งของฉันเพื่อที่ฉันจะได้เริ่มอ่านในตัวละครแต่ละตัว
เมื่อฉันค้นหาจุดจบจริงๆ แล้วฉันก็สามารถพิมพ์ตัวละคร
อ่านตัวละครแล้วพิมพ์ออกมา
ตรงนี้ผมบอกเปอร์เซ็นต์
c ได้ แล้วบอก fgetc และตัวชี้ไฟล์ได้
อีกครั้ง ที่ฉันทำอยู่นี้คือในบรรทัดที่ 22 หรือบรรทัดที่ 19 อย่างแรก ฉันจะย้ายตัวชี้ไปที่จุดสิ้นสุด
จากนั้นฉันได้รับตัวนับเพราะนั่นจะบอกฉันว่าฉันต้องอ่านในแต่ละไบต์นานเท่าใดโดยใช้
ftell
จากนั้น while loop ของฉันจะไปจากศูนย์จนถึงการนับจำนวนไบต์ที่ฉันต้องการอ่าน
ในบรรทัดที่ 26 ฉันจะเพิ่มตัวนับ
จากนั้นฉันจะค้นหาไบต์จำนวนมากจากจุดสิ้นสุด
ซึ่งก็คือลบฉันจากจุดสิ้นสุด แล้วบรรทัดที่ 28 ผมจะอ่านอักขระตัวนั้นแล้วพิมพ์ออกมา
และนั่นคือเหตุผลหลักสำหรับโปรแกรม
สิ่งเดียวที่ฉันต้องทำคือฉันต้องการพิมพ์การป้อนบรรทัดในตอนท้าย
เพื่อให้อ่านง่ายขึ้น ฉันต้องการปิดตัวชี้ไฟล์
ผมอยากบอกว่า fp, แล้วผมอยากกลับ,
และผมอยากให้ fp เท่ากับ null
ลองรวบรวมสิ่งนี้ และสิ่งที่เราจะได้เห็นคือการพิมพ์ไฟล์ในลำดับที่กลับกัน
เราไม่ได้เปลี่ยนเนื้อหาของไฟล์
เราแค่อ่านตั้งแต่ต้นจนจบโดยใช้ฟังก์ชันตำแหน่งของเรา
เมื่อเรารันสิ่งนี้ เราควรเห็นลำดับที่ตรงกันข้ามหรือกลับกัน
ดังนั้นสิ่งที่คุณจะสังเกตได้ตรงนี้ คือเราเห็นลำดับที่กลับกัน
เรากำลังพิมพ์ไฟล์สุดท้ายก่อน
และถ้าเรานำไฟล์นั้นขึ้นมาในไดเร็กทอรีดาวน์โหลดของเรา คุณจะสังเกตเห็นว่าไฟล์นั้นกำลังพิมพ์ออกมาเป็นเอาต์พุต
กำลังพิมพ์ enif
space gniod และอื่นๆ
บรรทัดสุดท้ายที่พิมพ์ออกมาคือ สวัสดี ฉันชื่อเจสัน ในทางกลับกัน
ดังนั้นจึงเป็นเพียงโปรแกรมเล็กๆ น้อยๆ ที่จะใช้ตัวชี้ไฟล์เพื่อเริ่มต้นในตอนท้าย
จากนั้นไปที่จุดเริ่มต้นและพิมพ์เนื้อหาในลำดับที่กลับกัน
สังเกตว่าเราใช้ fseek อย่างไร สังเกตว่าเราใช้ ftell อย่างไร
Fseek ย้ายตัวชี้ไฟล์ ftell ไปถึงตำแหน่งที่คุณอยู่ในตำแหน่งของไฟล์
ตอนนี้คุณสามารถใช้การนับเพื่อย้อนกลับได้
จากนั้นอีกครั้ง ใช้ค่าลบ I เพื่อบอกว่ามีกี่ไบต์จากจุดสิ้นสุดและ
fgetc ด้วยตัวชี้ไฟล์
ฉันจะให้ซอร์สโค้ดนี้เป็นวิธีแก้ปัญหา และคุณสามารถเปรียบเทียบและดูและวิเคราะห์ในรายละเอียดเพิ่มเติมได้
หวังว่านี่จะช่วยได้ ขอขอบคุณ.