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 .
#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.
#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:
12 56 Maka output yang akan dihasilkan adalah:
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:
#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:
1-30.4-5.0 Maka output yang akan dihasilkan adalah:
1 -30 0.400000 -5.000000 Alur pembacaan input dari fungsi scanf adalah sebagai berikut:
- Conversion specification
%dakan membaca input1, namun dikarenakan input selanjutnya adalah-, maka input-akan diabaikan dan nilai1yang akan disimpan ke dalam variabeli. - Conversion specification
%dakan membaca input-dan disusul dengan30, namun dikarenakan input selanjutnya adalah., maka input.4akan diabaikan dan nilai-30yang akan disimpan ke dalam variabelj. - Conversion specification
%fakan membaca input.yang disusul dengan nilai4, namun dikarenakan input selanjutnya adalah-, maka input-5.0akan diabaikan dan nilai.4(0.4) akan disimpan ke dalam variabelx. - Conversion specification
%fakan membaca input-yang disusul dengan nilai50maka nilai-5.0yang akan disimpan ke dalam variabely.
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:
#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:
10000 test 50000 Maka output yang akan dihasilkan adalah:
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.