Reading input with scanf pada 1-c-programming-language | belajar system-programming | Peskom Guide
Home

Reading input with scanf

Last Updated : 06 January 2025 / 4 min read

Sama halnya dengan fungsi printf , fungsi scanf juga merupakan fungsi yang berasal dari standard library stdio.h . Bedanya, jika fungsi printf digunakan untuk menampilkan output ke layar, fungsi scanf digunakan untuk membaca input dari keyboard dengan format specification dan conversion yang sama dengan fungsi printf .

scanf.c
 #include <stdio.h>
 
int main() {
    int i, j;
 
    printf("Enter first integer: ");
    scanf("%d", &i);
 
    printf("Enter second integer: ");
    scanf("%d", &j);
 
    printf("The sum of %d and %d is %d\n", i, j, i + j);
 
    return 0;
}  

Perlu diperhatikan pada baris yang di-highlight diatas. Fungsi scanf akan membaca input dan menempatkan nilai tersebut ke dalam variabel yang telah dibuat sebelumnya. Tipe data dari nilai tersebut akan dikonversikan sesuai dengan conversion specification yang telah kita tetapkan, yang dimana dalam kasus diatas adalah %d yang akan mengonversikan nilai input ke dalam tipe data integer .

Beberapa hal yang perlu diperhatikan adalah, fungsi scanf akan mengabaikan setiap whitespace seperti spasi, tab, dan newline dari input yang dibaca.

scanf.c
 #include <stdio.h>
 
int main() {
    int i, j;
    float x, y;
 
    scanf("%d%d", &i, &j);
    printf("%d %d", i, j);
 
    return 0;
}  

Jika kita memasukkan input:

Scanf with whitespace input
 12                   56  

Maka output yang akan dihasilkan adalah:

Scanf with whitespace output
 12 56  

Dalam penggabungan beberapa conversion specification pada fungsi scanf , maka input yang dibaca akan disesuaikan dengan conversion specification yang telah ditetapkan, dari kiri ke kanan.

Sebagai contoh, jika kita memiliki program seperti berikut:

scanf with multiple conversion specification
 #include <stdio.h>
 
int main() {
    int i, j;
    float x, y;
 
    scanf("%d%d%f%f", &i, &j, &x, &y);
    printf("%d %d %f %f", i, j, x, y);
 
    return 0;
}  

Jika kita memasukkan input:

Scanf with multiple conversion specification input
 1-30.4-5.0  

Maka output yang akan dihasilkan adalah:

Scanf with multiple conversion specification output
 1 -30 0.400000 -5.000000  

Alur pembacaan input dari fungsi scanf adalah sebagai berikut:

  1. Conversion specification %d akan membaca input 1 , namun dikarenakan input selanjutnya adalah - , maka input - akan diabaikan dan nilai 1 yang akan disimpan ke dalam variabel i .
  2. Conversion specification %d akan membaca input - dan disusul dengan 30 , namun dikarenakan input selanjutnya adalah . , maka input .4 akan diabaikan dan nilai -30 yang akan disimpan ke dalam variabel j .
  3. Conversion specification %f akan membaca input . yang disusul dengan nilai 4 , namun dikarenakan input selanjutnya adalah - , maka input -5.0 akan diabaikan dan nilai .4 ( 0.4 ) akan disimpan ke dalam variabel x .
  4. Conversion specification %f akan membaca input - yang disusul dengan nilai 50 maka nilai -5.0 yang akan disimpan ke dalam variabel y .

Hal lain yang perlu kita perhatikan juga adalah, seandainya kita memasukkan input dengan jumlah yang lebih dari fungsi scanf kita saat itu, maka nilai yang tidak terbaca tersebut akan tetap disimpan untuk dibaca pada pemanggilan fungsi scanf selanjutnya. Sebagai contoh:

scanf with more input than expected
 #include <stdio.h>
 
int main() {
    int i, j;
    char str[10];
 
    scanf("%d%s", &i, str);
    printf("%d %s", i, str);
 
    printf("\n");
 
    scanf("%d", &j);
    printf("%d", j);
 
    return 0;
}  

Jika kita memasukkan input:

Input with more characters than expected
 10000 test 50000  

Maka output yang akan dihasilkan adalah:

The excess input will be stored for the next scanf call
 10000 test
50000  

Nilai 50000 tidak akan diambil oleh fungsi scanf pertama karena sudah melebihi jumlah conversion specification yang telah ditetapkan. Oleh karena itu, nilai 50000 baru akan disimpan ke dalam variabel j pada panggilan fungsi scanf kedua.

Perlu diingat bahwa fungsi scanf adalah fungsi yang cukup risky karena kita tidak bisa mengetahui apakah input yang kita masukkan sudah sesuai dengan conversion specification yang telah ditetapkan.

Tentu saja kita bisa menambahkan error checking untuk mengetahui apakah input yang kita masukkan sudah sesuai dengan conversion specification yang telah ditetapkan, namun tergantung dari jumlah input yang kita masukkan, cara tersebut bisa menjadi tidak efisien.

Ada fungsi lain yang lebih aman digunakan untuk membaca input yang akan kita pelajari pada modul kedepan.

Apakah konten ini membantu ? Jika ya, kami akan sangat menghargai jika Anda bisa memberikan bintang pada GitHub Repository kami dan ikuti sosial media dari komunitas Peskom di Facebook . Dukungan Anda membantu kami untuk terus berkembang! 🌟

Dan juga jika Anda menemukan kesalahan, typo, kekurangan, atau kesalahan pada artikel ini, kami sangat terbuka untuk masukan. Silakan laporkan temuan Anda melalui halaman Github Issues ini . Mari bersama-sama meningkatkan kualitas konten untuk komunitas Peskom! 🚀

Semoga semangat open source turut senantiasa menyertaimu.