Ahlan wa sahlan !

Ahlan wa sahlan...
TIKmawar adalah blog TIK untuk guru dan siswa yang ingin memahami teknologi secara logis, praktis, dan menyenangkan. Bareng Bu Mawar, kita akan belajar TIK tidak hanya klik-klik, tetapi juga memahami maksudnya .

Ketika Program Tidak Error, Belum Tentu Program Benar

 Banyak orang mengira jika program berhasil dikompilasi berarti kodenya sudah benar. Padahal tidak selalu begitu. Ada jenis kesalahan yang tidak menghentikan program, tetapi di logikanya gagal.

اَلسَّلَامُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ

Yuk, kita bahas bareng Bu Mawar.

Program bahasa C tidak menampilkan pesan error, berhasil dijalankan, tetapi hasilnya aneh? 

Input yang dimasukkan seperti diabaikan, variabel tidak terisi, atau muncul angka acak. 

Banyak yang mengira komputernya bermasalah (error), padahal penyebabnya bisa sesederhana salah menulis scanf().

Kesalahan kecil ternyata bisa membuat program berjalan dengan hasil yang salah tanpa memberi peringatan apa pun.

Penulisan yang benar :

int angka;

scanf("%d", &angka);

Artinya:

  • %d digunakan untuk membaca bilangan bulat (integer)
  • &angka menunjukkan alamat variabel tempat menyimpan input

Namun bagaimana jika tertukar menjadi: scanf("d%", &angka);

Sekilas terlihat mirip. Hanya posisi % yang berpindah. Banyak pemula mengira ini hal kecil. Padahal dampaknya cukup besar.

Kenapa scanf("d%") Bisa Bermasalah?

scanf() membaca input berdasarkan pola tertentu yang disebut format specifier.

Saat menulis: scanf("%d", &angka);

program memahami:

"Tunggu input angka dari pengguna"

Tetapi ketika ditulis: scanf("d%", &angka);

program justru memahami:

"Tunggu pengguna mengetik karakter d%"

Jadi jika pengguna memasukkan: 25

input tersebut tidak sesuai dengan yang diharapkan.

Akibatnya:

  • scanf() gagal membaca input
  • variabel tidak terisi
  • nilai menjadi acak atau tidak sesuai

Contoh program:

#include <stdio.h>

int main() {

    int angka;

    scanf("d%", &angka);

    printf("%d", angka);

    return 0;}

Input:

25

Output:

  • 0
  • atau angka acak lain.

Hal ini terjadi karena variabel angka sebenarnya tidak pernah menerima data. 

Tidak ada komentar:

Posting Komentar