Cara Membaca Input Pengguna di C dengan scanf

8

Konstanta bersifat kaku. Mereka tidak berubah. Hidup tidak seperti itu, begitu pula program pengujian Anda. Jika Anda mempelajari C, angka-angka hard-coding seperti 5 dan 7 akan cepat menjadi tua. Anda ingin interaksi. Anda ingin komputer menunggu Anda mengetik sesuatu.

Masukkan scanf.

Ini adalah separuh cerita printf lainnya. Saat printf mendorong data ke layar, scanf menarik data dari keyboard. Ini bukan alat yang paling tangguh di perpustakaan standar C, tetapi untuk input konsol sederhana, alat ini menyelesaikan pekerjaan tanpa memerlukan ketergantungan pihak ketiga.

Inilah cara Anda mengambil skrip statis dan menjadikannya dinamis.

Kode

Salin ini. Jalankan. Ketikkan angka saat diminta.

Menguraikan scanf

Keajaiban terjadi dalam dua baris ini:

memindai("%d", &a);

  • scanf : Nama fungsi. Singkatan dari “pindai masukan yang diformat”.
  • "%d" : Penentu format. Ia memberitahu scanf untuk mengharapkan bilangan bulat. Jika Anda membaca float, Anda akan menggunakan "%f".
  • &a : Ini adalah bagian penting. Anda tidak meneruskan nilai dari a. Anda meneruskan alamat a.

Anggap saja seperti ini: printf perlu mengetahui apa yang ada di dalam variabel. scanf perlu mengetahui di mana harus meletakkan data. Operator & menyediakan alamat memori itu. Lewati ampersand, dan Anda akan crash. Atau lebih buruk lagi, Anda akan mendapatkan peringatan yang terlihat seperti omong kosong dan variabel yang tidak berubah.

Cara Kerja dalam Praktek

Saat Anda menjalankan program:

  1. Terminal mencetak: Masukkan nilai pertama:
  2. Kursor berkedip. Itu menunggu. Anda terjebak di sini sampai Anda mengetik sesuatu dan menekan Enter.
  3. Anda mengetik 5. Anda menekan Enter.
  4. scanf mengambil 5 itu, mengubah string karakter “5” menjadi nilai integer 5, dan menyimpannya di alamat memori &a.
  5. Perulangan yang sama terjadi untuk nilai kedua.

Lalu tibalah perhitungannya. c = a + b;. Tambahan sederhana.

Terakhir, printf menampilkan hasilnya. Namun perhatikan format string: printf("%d + %d = %d\n", a, b, c);. Anda memasukkan variabel kembali ke dalam string. Inilah cara Anda membuat keluaran yang dapat dibaca.

Mengapa Ini Penting

Sebagian besar aplikasi modern tidak menggunakan input konsol. Anda tidak mengetikkan perintah ke dalam kotak hitam untuk browser web atau editor foto Anda. Namun memahami aliran ini adalah hal mendasar.

Masukan -> Proses -> Keluaran.

Itulah inti dasar dari semua perangkat lunak. `

Bagaimana scanf menangani alamat memori

Saat Anda menjalankan kode ini, perbedaan antara sukses dan crash runtime hanya pada satu karakter. Khususnya, ampersand (& ) sebelum variabel a dan b.

Ini adalah operator alamat. Ia memberi tahu scanf di mana tepatnya di memori untuk menyimpan input yang diterimanya. Tanpanya, scanf tidak mengetahui lokasi variabel. Itu hanya mendapat nilai, yang tidak berguna untuk menyimpan data kembali ke dalam program. Jika Anda mengabaikannya, program tidak akan dapat dikompilasi atau akan langsung crash setelah dijalankan. Anda memerlukan operator ini untuk char, int, float, dan tipe struktur.

Coba hapus itu. Perhatikan apa yang terjadi. Ini adalah pelajaran yang menyakitkan namun penting tentang bagaimana C mengelola memori.

Menguasai keluaran printf

printf adalah jendela Anda ke pengguna. Ini mengirimkan data ke output standar. Versi paling sederhana sangatlah mudah.

Ini mencetak kata Halo. Tidak ada yang lain. Tidak ada jeda baris. Kursor tetap berada tepat setelah ‘o’.

Tambahkan karakter baris baru.

Sekarang output berpindah ke baris berikutnya. \n adalah pengembalian kereta. Ini penting untuk keluaran konsol yang dapat dibaca.

Variabel mengubah permainan. Anda tidak bisa begitu saja mencetak nama variabel seperti yang Anda lakukan dengan Python atau JavaScript. Anda harus menggunakan placeholder.

%d adalah pengganti. Itu digantikan oleh nilai integer b saat runtime. Beginilah cara C menangani keluaran dinamis.

Anda dapat mencampur teks dan variabel. Salah satu cara yang kikuk adalah merangkai banyak cetakan.

Ini berhasil. Itu juga bertele-tele. Pendekatan yang lebih bersih menyematkan semuanya dalam satu string.

Berbagai nilai juga berfungsi. Jaga agar placeholder tetap selaras dengan argumen.

Urutan itu penting. %d pertama dipetakan ke a. Yang kedua dari b. Yang ketiga ke c. Jika Anda menukarnya, perhitungannya salah. Jika Anda melewatkan satu, perilakunya tidak terdefinisi. Jumlah dan jenis operator dalam format string harus sama persis dengan parameternya.

Placeholder khusus tipe

C ketat tentang tipe. Anda tidak dapat menggunakan placeholder yang sama untuk semuanya. Anda harus mencocokkan tipe data dengan penentu format.

  • Gunakan %d untuk int (nilai integer).
  • Gunakan %f untuk float (angka floating point).
  • Gunakan %c untuk char (karakter tunggal).
  • Gunakan %s untuk string karakter (array karakter).

Jika Anda menggunakan %d untuk float, Anda mendapatkan keluaran sampah. Jika Anda menggunakan %s untuk int, kemungkinan besar program akan crash. Presisi bukanlah pilihan di sini.

Untuk rincian lebih lanjut tentang penentu ini, periksa manual UNIX. Ketik man 3 printf. Kompiler lain menyediakan dokumentasi serupa. Ini layak untuk dibaca.

Kesalahan umum yang harus dihindari

Kompiler C sangat membantu, tetapi mereka bukan pembaca pikiran. Anda akan membuat kesalahan. Inilah cara menghindari hal yang paling umum.

  1. Sensitivitas huruf besar-kecil : C peka huruf besar-kecil. Printf atau PRINTF akan gagal. Itu pasti printf. Hal yang sama berlaku untuk nama variabel dan pemanggilan fungsi.
  2. Operator alamat tidak ada : Lupa & di scanf adalah kesalahan yang sering terjadi. Hal ini menyebabkan kegagalan runtime langsung. Selalu sertakan untuk tipe primitif.
  3. Parameter tidak cocok : Terlalu banyak atau terlalu sedikit argumen di printf atau scanf menyebabkan kesalahan. String format menentukan strukturnya. Bersitahan.
  4. Variabel yang tidak dideklarasikan : Anda harus mendeklarasikan variabel sebelum menggunakannya. C tidak menyimpulkan tipe. Anda mendefinisikan int a; sebelum Anda dapat mencetak a.

Kesalahan ini berulang. Mereka juga mudah diperbaiki setelah Anda mengenali polanya.