Tutorial Belajar C Part 21: Cara Membaca String dengan scanf dan gets

Dalam tutorial sebelumnya, kita telah membahas pengertian dan cara penulisan tipe data string dalam bahasa C. Karena tipe data string ini cukup sering dipakai, saya akan bahas sedikit tentang Cara Membaca String dengan scanf dan gets karena ada perbedaan yang cukup penting.


Membaca String dengan scanf

Di awal tutorial belajar bahasa C di duniailkom ini, kita pernah membahas tentang perintah scanf yang dipakai untuk meminta input dari user. Berikut contohnya:

#include <stdio.h>
 
int main(void)
{
  int harga;
 
  printf("Masukkan harga barang: ");
  scanf("%d",&harga);
 
  printf("\n");
  printf("Harga barang adalah: %d", harga);
  printf("\n");
 
  return 0;
}

contoh kode program scanf bahasa CCara yang sama juga bisa dipakai untuk tipe data string, seperti contoh berikut:

#include <stdio.h>

int main(void)
{
  char nama[20];
  printf("Input nama: ");
  scanf("%s",nama);

  printf("\n");
  printf("Selamat belajar %s \n", nama);
  return 0;
}

Kode program scanf tipe data string bahasa pemrograman C

Di baris 5 saya mendefinisikan sebuah variabel nama sebagai char nama[20]. Artinya, variabel nama bisa menampung 19 karakter (ingat, 1 karakter lagi menjadi jatah untuk null).

Di baris 7, perintah scanf dipakai untuk menerima inputan dari user. Inputan ini kemudian disimpan ke dalam variabel nama yang selanjutnya ditampilkan kembali dengan perintah printf di baris 10.

Meskipun nama "Andika" yang saya input tidak persis 19 karakter, ini tidak menjadi masalah selama panjang inputan tetap kurang dari 19 karakter.

Perhatikan juga bahwa di sini perintah scanf tidak butuh tanda '&' sebagaimana tipe data dasar seperti int, float dan char. Tanda '&' merujuk ke pointer yang berisi alamat memory dari variabel tersebut. Namun karena variabel nama adalah array of char, pointer ini tidak diperlukan.

Mari kita coba input dengan nama yang terdiri dari 2 kata:

Masalah dengan kode program scanf tipe data string bahasa pemrograman C

Loh, apa yang terjadi? Kenapa kata "Putra" tidak terbaca?

Inilah keterbatasan dari perintah scanf ketika dipakai untuk membaca string. Pada saat scanf memproses karakter whitespace seperti spasi atau tab, proses pembacaan berhenti sampai di sana. Akibatnya, kata "Putra" tidak terbaca.

Untuk mengatasi masalah ini, kita bisa menggunakan fungsi gets.


Membaca String dengan gets

Gets adalah sebuah fungsi atau function di dalam bahasa C yang dipakai untuk membaca inputan user. Penggunaannya lebih sederhana daripada scanf, seperti contoh berikut:

#include <stdio.h>

int main(void)
{
  char nama[20];
  printf("Input nama: ");
  gets(nama);

  printf("\n");
  printf("Selamat belajar %s \n", nama);
  return 0;
}

Di baris 6, terdapat perintah gets(nama), di sini user akan diminta untuk menginput sesuatu untuk disimpan ke dalam variabel nama.

Mari kita coba nama yang sama, yakni "Andika Putra":

Kode program gets tipe data string bahasa pemrograman C

Siip, sekarang sudah tidak ada masalah. Fungsi gets bisa membaca seluruh string, termasuk spasi sampai di tekan tombol Enter.


Dalam contoh kasus ini kita bisa melihat batasan dari perintah scanf. Untuk pembacaan tipe data string, sebaiknya gunakan fungsi gets daripada scanf.

Berikutnya, kita masih membahas seputar string dalam bahasa C, yakni Cara Mengubah Isi String dengan Fungsi strcpy.

6 Comments

  1. Dion
    21 Oct 18
    • Andre
      22 Oct 18
  2. Rendy
    14 Mar 19
    • azza
      17 Oct 21
  3. Udin
    10 Mar 21
  4. hakim
    01 Nov 21

Add Comment