Berhenti menggunakan fscanf untuk membaca file teks. Ini adalah jebakan. Kecuali jika data Anda diformat dengan sempurna hingga spasi terakhir, fscanf akan tersedak, tidak selaras, dan membuat Anda kesulitan melakukan debug. Jalur yang dapat diandalkan? Buka dengan mode r, gunakan fgets untuk mengambil seluruh baris, dan parsing bagian yang Anda perlukan sesudahnya.
Berikut adalah cara mudah untuk membaca file dan membuang isinya ke layar tanpa merusak sistem Anda.
Logikanya di sini tampak sederhana. fgets membaca satu baris, hingga 1.000 karakter dalam buffer ini, dan mengembalikan NULL hanya ketika mencapai penanda akhir file. Ini mencetak langsung ke stdout melalui printf. Perhatikan kurangnya \n dalam string format printf? Itu disengaja. fgets secara otomatis menambahkan karakter baris baru ke akhir string yang dibacanya. Jika Anda menambahkan \n Anda sendiri, Anda mendapatkan spasi ganda. Lebih penting lagi, jika sebuah baris lebih panjang dari 1.000 karakter, fgets tidak akan menambahkan baris baru. Anda dapat mendeteksi pembacaan yang tidak lengkap ini dengan memeriksa \n yang hilang, sebuah trik praktis jika Anda berurusan dengan format data yang salah.
“Gunakan fgets untuk membaca setiap baris, lalu uraikan bagian yang Anda perlukan.”
Ada satu kesalahan kritis yang membuat pengembang berpengalaman sekalipun tersandung. Jangan salah ketik fclose sebagai close. Kompiler tidak akan menangkapnya. Fungsi close ada, dan untuk skrip kecil yang membuka dan menutup file hanya sekali atau dua kali, fungsi ini mungkin berfungsi dengan baik. Itu bohong.
Jika Anda menjalankan ini dalam satu lingkaran, close gagal melepaskan sumber daya file yang mendasarinya dengan benar. Akhirnya, program Anda kehabisan pegangan file atau ruang memori yang tersedia dan mengalami crash parah. fclose adalah satu-satunya cara yang benar untuk menutup pintu. close adalah jalan pintas yang mengarah ke batu bata. Tetap berpegang pada perpustakaan standar. Jaga agar buffer Anda tetap diperiksa. Jangan biarkan kesalahan ketik memakan ingatan Anda.


























