Pengodean angka secara hardcoding boleh dilakukan pada percobaan pertama, tetapi perangkat lunak sebenarnya perlu bereaksi terhadap apa yang diketik orang. Cuplikan asli menggunakan konstanta. Itu statis. Dapat diprediksi. Membosankan.

Agar suatu program bermanfaat, Anda perlu mengambil data dari pengguna saat runtime. Anda melakukan ini dengan scanf. Ini adalah kebalikan dari printf. Saat printf mendorong data keluar ke layar, scanf menariknya dari keyboard.

Inilah cara Anda menangani input bilangan bulat dasar di C.

Menangkap Masukan Pengguna

Anda tidak bisa begitu saja mendeklarasikan suatu variabel dan mengharapkannya menyimpan data pengguna secara ajaib. Anda perlu memintanya. Anda juga perlu memberi tahu komputer di mana menyimpan data tersebut. Itu sebabnya scanf memerlukan pointer (simbol & ). Jika Anda lupa ampersand, program akan crash atau menulis sampah ke memori. Selalu sertakan untuk tipe primitif seperti int.

Pertimbangkan logika yang diperbarui ini:

  1. Deklarasikan variabel untuk menampung input dan hasilnya.
  2. Minta pengguna agar mereka tahu apa yang harus diketik.
  3. Gunakan scanf dengan penentu format yang benar (%d untuk bilangan bulat).
  4. Lakukan penghitungan menggunakan nilai yang disimpan.
  5. Keluarkan hasilnya dengan mencampurkan variabel masukan ke dalam string cetak.

Mengapa Ini Penting

Peralihan dari konstanta ke variabel mengubah segalanya. Program ini bukan lagi rekaman yang rusak. Itu beradaptasi. Anda dapat menjalankannya sekali dengan 5 dan 7. Anda dapat menjalankannya lagi dengan 100 dan 200. Logikanya tetap sama; datanya berubah.

Ini adalah dasar dari aplikasi CLI (Command Line Interface) interaktif. Sebelum Anda dapat membuat alat yang kompleks, Anda harus memahami cara memasukkan data ke dalam variabel Anda dengan aman.

Poin Penting

  • scanf memerlukan pointer: Selalu gunakan alamat operator (& ) sebelum nama variabel Anda di scanf.
  • Penentu format harus cocok: Jika Anda membaca int, Anda harus menggunakan %d. Menggunakan %f untuk bilangan bulat akan menyebabkan perilaku tidak terdefinisi.
  • Permintaan sangat penting: Tanpa perintah yang jelas seperti “Masukkan nilai pertama:”, pengguna dibiarkan menatap kursor yang berkedip, bertanya-tanya apakah program dibekukan. Bukan itu. Itu hanya menunggu.

Kodenya berfungsi. Sederhana saja. Tapi itu fungsional. Anda telah berpindah dari skrip statis ke alat dinamis. Langkah selanjutnya biasanya adalah penanganan kesalahan. Apa yang terjadi jika pengguna mengetik “halo” dan bukan nomor? scanf akan gagal secara diam-diam, sehingga variabel Anda tidak diinisialisasi. Itu masalah untuk hari lain.

Untuk saat ini, Anda memiliki program yang benar-benar mendengarkan.

Masukan, Keluaran, dan Aturan Keterlibatan

Anda telah melakukan pengeditan. Sekarang kompilasi. Jalankan. Jika crash, jangan panik. Mungkin melewatkan detail sintaksis kecil.

Ambil scanf. Ini meniru printf dalam penggunaan format string. Ketik man scanf jika Anda memerlukan cetakan kecil. Namun perhatikan tanda ampersand (& ) sebelum variabel seperti a dan b.

Ini adalah operator alamat.

Ini mengembalikan alamat memori variabel. Ini mungkin terlihat membingungkan sekarang. Petunjuk akan memperjelas hal ini nanti. Namun untuk saat ini, ikuti aturannya: jika Anda menggunakan scanf pada char, int, atau float, Anda memerlukan &. Anda juga membutuhkannya untuk struktur.

Lewati &? Anda akan mendapatkan kesalahan run-time. Hancurkan dengan sengaja. Lihat apa yang terjadi. Ini satu-satunya cara untuk mengingat mengapa hal itu penting.

Memformat Output dengan Tepat

Mari kita membedah printf. Mulailah dengan sederhana.

printf("Halo");

Ini mengirimkan kata “Halo” ke keluaran standar. Tidak ada yang lain. Tidak ada baris baru. Kursor tetap berada tepat setelah huruf “o”.

Sekarang tambahkan baris baru.

printf("Halo\n");

\n memicu pengangkutan kembali. Outputnya berakhir pada jalurnya sendiri. Ini adalah ekspektasi standar untuk keluaran konsol yang bersih.

Variabel memerlukan placeholder. Untuk mencetak nilai b :

printf("%d",b);

%d adalah pengganti. Saat kode dijalankan, printf menukarnya dengan nilai integer aktual b.

Anda dapat menyematkan nilai dalam kalimat. Anda dapat menyambungkan beberapa panggilan:

printf("Suhunya adalah "); printf("%d",b); printf("derajat\n");

Tapi itu membosankan. Pendekatan yang lebih bersih menggabungkannya menjadi satu format string:

printf("Suhu %d derajat\n",b);

Berbagai nilai juga berfungsi.

printf("%d + %d = %d\n",a,b,c);

Inilah jebakannya. Jumlah placeholder dalam format string harus sesuai dengan jumlah variabel yang mengikutinya. Tepat.

Jika Anda memiliki tiga tag %d, Anda memerlukan tiga parameter. Jenisnya harus cocok. Urutannya harus sesuai. Tidak cocok dengan ini? Outputnya akan menjadi sampah. Atau lebih buruk lagi, itu akan crash.

Jenis Pencocokan dengan Placeholder

printf menangani sebagian besar tipe C standar. Anda hanya perlu kode yang tepat.

  • int menggunakan %d
  • float menggunakan %f
  • char menggunakan %c
  • string karakter menggunakan %s

Untuk nuansa yang lebih mendalam, periksa man 3 printf pada sistem UNIX. Kompiler spesifik Anda kemungkinan besar memiliki file manual atau bantuan yang mencakup kasus-kasus edge.

Kesalahan Umum

Pengembang baru tersandung berulang kali.

Sensitivitas huruf sangat ketat. printf adalah huruf kecil. Printf atau PRINTF akan gagal.

scanf meminta operator alamat (& ). Lupakan saja, dan program tidak akan menyimpan masukan Anda dengan benar.

Jumlah parameter penting. Terlalu banyak atau terlalu sedikit argumen di printf atau scanf menyebabkan perilaku tidak terdefinisi.

Deklarasi datang sebelum penggunaan. Anda tidak dapat menggunakan nama variabel di C tanpa mendeklarasikannya terlebih dahulu. Kompiler perlu mengetahui tata letak dan tipe memori terlebih dahulu.

Kompiler tidak menebak. Ini memaksa.