Bab. 8 Masukan/Keluaran
Tujuan
Instruksional
|
|
·
Aliran.
·
Format keluaran
dengan printf.
·
Menampilkan
integer.
·
Menampilkan angka
pecahan.
·
Menampilkan string
dan karakter.
·
Penspesifikasi konversi
lainnya.
·
Menampilkan dengan
lebar bidang dan kepresisian.
|
·
Menggunakan flag di dalam string kendali format printf.
·
Menampilkan literal
dan escape sequence.
·
Membaca masukan
terformat dengan scanf.
|
8.1 Introduksi
Salah satu bagian penting dari solusi
terhadap sembarang permasalahan adalah penyajian hasil. Pada bab ini, akan
didiskusikan kedalaman fitur pemformatan dari scanf dan printf. Kedua fungsi ini membaca/memasukkan
data dari aliran masukan standar dan menampilkan/mengeluarkan data dari aliran
keluaran standar. Empat fungsi lainnya yang menggunakan masukan/keluaran
standar adalah gets, puts, getchar, dan putchar, yang telah didiskusikan pada Bab 7.
Banyak fitur printf dan scanf telah didiskusikan pada buku ini. Bab ini menyimpulkan semua fitur
tersebut dan mengenalkan fitur lainnya. Bab 10 akan mendiskusikan beberapa
fungsi lainnya yang disertakan di dalam pustakan masukan/keluaran standar (<stdio.h>).
8.2 Aliran
Semua masukan dan keluaran dilakukan
dengan aliran, yang merupakan runtun byte. Dalam operasi masukan, byte demi
byte mengalir dari sebuah divais (papan-ketik, disk drive, atau koneksi jaringan) ke memori utama. Dalam operasi
keluaran, byte demi byte mengalir dari memori utama ke suatu divais (layar,
printer, disk drive, koneksi
jaringan, dan seterusnya).
Ketika program mulai dieksekusi, tiga
aliran terkoneksi ke program secara otomatis. Secara normal, aliran masukan
standar terkoneksi ke papan-ketik dan aliran keluaran standar terkoneksi ke
layar/monitor. Sistem operasi mengijinkan semua aliran diredireksi ke divais
lain. Aliran ketiga, aliran error standar, terkoneksi ke layar. Pesan error
ditempatkan ke aliran error standar. Ketiga aliran ini secara detil akan
dibahas pada Bab 10 mengenai Pemrosesan File.
8.3 Pemformatan Keluaran Dengan printf
Pemformatan keluaran secara presisi
disediakan oleh printf. Setiap
pemanggilan printf memuat sebuah
string kendali format yang mendeskripsikan format keluaran. String kendali
format terdiri-dari penspesifikasi konversi, flag (bendera), lebar bidang, kepresisian, dan karakter literal.
Digabungkan dengan tanda persen (%), string kendali tersebut membentuk
spesifikasi konversi. Fungsi printf dapat melakukan
beberapa kapabilitas pemformatan sebagai berikut, dimana masing-masing kapabilitas
akan dibahas pada bab ini:
1.
Pembulatan nilai pecahan menjadi sejumlah tertentu
dari titik desimal.
2.
Menyejajarkan kolom angka dengan titik desimal.
3.
Menyejajarkan kiri dan kanan atas keluaran.
4.
Menyisipkan karakter literal dengan lokasi presisi
pada baris keluaran.
5.
Merepresentasikan angka pecahan dalam format
eksponensial.
6.
Merepresentasikan integer tak-bertanda dalam
format oktal dan heksadesimal.
7. Menampilkan
semua tipe data dengan lebar bidang dan kepresisian berukuran tetap.
Fugsi printf mempunyai format
printf(
string-kendali-format, argumen-lainnya);
string-kendali-format mendeskripsikan
format keluaran, dan argumen-lainnya (opsional) terkait dengan tiap spesifikasi
konversi di dalam string-kendali-format. Setiap spesifikasi konversi diawali
dengan tanda persen dan diakhiri dengan sebuah penspesifikasi konversi. Ada
banyak spesifikasi konversi di dalam satu string kendali format.
8.4 Menampilkan Integer
Suatu integer merupakan angka, seperti
776, 0, atau -52, yang tidak memuat titik desimal. Nilai integer ditampilkan
dalam salah satu dari beberapa format. Gambar 8.1 mendeskripsikan
penspesifikasi konversi integer.
Penspesifikasi Konversi
|
Penjelasan
|
d
i
o
u
x atau X
h atau l (huruf l)
|
Menampilkan
integer sebagai integer desimal bertanda.
Menampilkan
integer sebagai integer desimal bertanda. [Catatan: i dan d berbeda
ketika digunakan dengan scanf].
Menampilkan
integer sebagai integer oktal tak-bertanda.
Menampilkan
integer sebagai integer desimal tak-bertanda.
Menampilkan integer
sebagai integer heksadesimal tak-bertanda. X menyebabkan dijit 0-9 dan huruf
A-F ditampilkan dan x menyebabkan dijit 0-9 dan huruf a-f ditampilkan.
Ditempatkan
sebelum suatu penspesifikasi konversi untuk mengindikasikan bahwa integer short atau long ditampilkan.
Huruf h dan l seca lebih tepat dinamakan dengan pemodifikasi panjang.
|
Gambar 8.1 | Penspesifikasi konversi integer
Gambar 8.2 menampilkan sebuah integer
menggunakan setiap penspesifikasi konversi integer. Hanya tanda minus yang
ditampilkan. Tanda plus diabaikan. Berikutnya pada bab ini akan Anda lihat
bagaimana memaksa menampilkan tanda plus. Di samping itu, nilai -455, ketika
dibaca dengan %u (baris 15),
dikonversi menjadi nilai tak-bertanda 4294966841.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/* Gambar 8.2: gambar08_02.c */
/* Menggunakan penspesifikasi konversi
integer */
#include <stdio.h>
int main( void )
{
printf( "%d\n", 455 );
printf( "%i\n", 455 ); /* i sama dengan d dalam
printf */
printf( "%d\n", +455 );
printf( "%d\n", -455 );
printf( "%hd\n", 32000 );
printf( "%ld\n", 2000000000L ); /* sufiks L membuat
literal long */
printf( "%o\n", 455 );
printf( "%u\n", 455 );
printf( "%u\n", -455 );
printf( "%x\n", 455 );
printf( "%X\n", 455 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
455
455
455
-455
32000
2000000000
707
455
4294966841
1c7
Gambar 8.2 | Menggunakan
penspesifikasi konversi integer
8.5 Menampilkan Angka Pecahan
Nilai pecahan memuat sebuah titik
desimal seperti di dalam 33.5, 0.0, atau -345.654. Nilai pecahan ditampilkan
dalam beberapa format. Gamabr 8.3 mendeskripsikan penspesifikasi konversi
titik-mengambang (pecahan). Penspesifikasi konversi e dan E menampilkan nilai pecahan dalam notasi
eksponensial, yang merupakan ekivalen dengan notasi saintifik yang digunakan
dalam matematika. Sebagai contoh, nilai 150.4582 direpresentasikan dalam notasi
saintifik sebagai
1.504582 ×
dan direpresentasikan dalam notasi
eksponensial sebagai
1.504582E+02
oleh komputer. Notasi ini
mengindikasikan bahwa 1.504582 dikalikan dengan 10 pangkat 2 (E+02). Simbol E adalah
singkatan dari “exponent”.
Nilai yang ditampilkan dengan
penspesifikasi konversi e, E, dan f menunjukkan
kepresisian enam dijit di sebelah kanan titik desimal secara default (misalnya,
1.045926); kepresisian lainya dapat dispesifikasi secara eksplisit.
Penspesifikasi konversi f selalu
menampilkan sedikitnya satu dijit di sebelah kiri titik desimal. Penspesifikasi
konversi e dan E menampilkan huruf kecil e dan huruf besar
E. Statemen
Penspesifikasi konversi g (atau G) menampilkan
format e (E) atau f tanpa adanya buntut nol (misalnya, 1.234000 ditampilkan sebagai
1.234). Nilai ditampilkan dengan format e (E) jika, setelah dikonversi ke notasi
eksponensial, nilai eksponen kurang dari -4, atau nilai eksponen lebih dari
atau sama dengan kepresisian yang ditentukan (enam dijit secara default untuk g dan G). Sebaliknya,
penspesifikasi konversi f digunakan untuk
menampilkan nilai tersebut. Buntut nol tidak ditampilkan pada bagian pecahan
(fraksional) dari suatu nilai yang ditampilkan dengan g atau G. Sedikitnya
satu dijit desimal dibutuhkan untuk titik desimal. Nilai seperti 0.0000875,
8750000.0, 8.75, 87.50, dan 875 ditampilkan sebagai 8.75e-05, 8.75e+06, 8.75,
87.5, dan 875 dengan penspesifikasi konversi g. Nilai 0.0000875 menggunakan
notasi e karena, ketika dikonversi menjadi notasi eksponensial, eksponennya
(-5) kurang dari -4. Nilai 8750000.0 menggunakan notasi e karena ekponennya (6)
sama dengan kepresisian default.
Penspesifikasi Konversi
|
Penjelasan
|
e atau E
f
g atau G
L
|
Menampilkan
nilai pecahan dalam notasi eksponensial.
Menampilkan
nilai pecahan dalam notasi titik-tetap.
Menampilkan
nilai pecahan dalam format titik-mengambang f atau format eksponensial e (atau E), berdasarkan
pada magnitudo nilai.
Ditempatkan
sebelum penspesifikasi konversi titik-mengambang untuk mengindikasikan bahwa
nilai pecahan long double yang ditampilkan.
|
Gambar 8.3 | Penspesifikasi konversi
titik-mengambang
Kepresisian untuk penspesifikasi
konversi g dan G mengindikasikan jumlah maksimum dari dijit signifikan yang ditampilkan,
termasuk dijit di sebelah kiri titik desimal. Nilai 1234567.0 ditampilkan
sebagai 1.234567e+06, menggunakan penspesifikasi konversi %g (ingat bahwa semua penspesifikasi konversi titik-mengambang
memiliki kepresisian default 6). Ada 6 dijit signifikan pada hasil. Perbedaan
antara g dengan G identik dengan perbedaan antara e dan E ketika nilai yang ditampilkan dalam
notasi eksponensial, dimana huruf kecil g menyebabkan huruf kecil e ditampilkan,
dan huruf besar G menyebabkan
huruf besar E ditampilkan.
Gambar 8.4 mendemonstrasikan
masing-masing penspesifikasi konversi titik-mengambang. Penspesifikasi konversi
%E, %e, dan %g menyebabkan nilai dibulatkan pada keluaran dan penspesifikasi konversi %f tidak menyebabkan pembulatan. [Perhatikan bahwa pada
beberapa kompiler, eksponen pada keluaran ditampilkan dengan dua dijit di
sebelah kanan tanda plus].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/* Gambar 8.4: gambar08_04.c */
/* Menampilkan angka pecahan dengan
penspesifikasi konversi titik-mengambang */
#include <stdio.h>
int main( void )
{
printf( "%e\n", 1234567.89 );
printf( "%e\n", +1234567.89 );
printf( "%e\n", -1234567.89 );
printf( "%E\n", 1234567.89 );
printf( "%f\n", 1234567.89 );
printf( "%g\n", 1234567.89 );
printf( "%G\n", 1234567.89 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
1.234568e+006
1.234568e+006
-1.234568e+006
1.234568E+006
1234567.890000
1.23457e+006
1.23457E+006
Gambar 8.4 | Menggunakan
penspesifikasi konversi integer
8.6 Menampilkan String dan Karakter
Penspesifikasi konversi c dan s digunakan untuk
menampilkan karakter individual dan string. Penspesifikasi konversi c memerlukan sebuah argumen char. Penspesifikasi konversi s memerlukan
sebuah pointer yang menunjuk ke char sebagai
argumen. Penspesifikasi konversi s menyebabkan
karakter-karakter ditampilkan sampai ditemukan karakter null penghenti (‘\0’). Program
yang ditunjukkan pada Gambar 8.5 menampilkan karakter dan string dengan
penspesifikasi konversi c dan s.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 8.5: gambar08_05.c */
/* Menampilkan string dan karakter */
#include <stdio.h>
int main( void )
{
char
karakter = 'A'; /* menginisialisasi char */
char
string[] = "Ini adalah sebuah string"; /* menginisialisasi array char */
const char *stringPtr = "Ini juga sebuah string"; /*
pointer char */
printf("%c\n",
karakter);
printf("%s\n",
"Ini adalah sebuah string");
printf("%s\n",
string);
printf("%s\n",
stringPtr);
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
A
Ini adalah sebuah string
Ini adalah sebuah string
Ini juga sebuah string
Gambar 8.5 | Menggunakan
penspesifikasi konversi string dan karakter
8.7 Penspesifikasi Konversi Lainnya
Tiga penspesifikasi konversi yang
tersisa adalah p, n, dan % (Gambar 8.6).
Penspesifikasi konversi %n menyimpan jumlah karakter yang ditampilkan sejauh ini
pada printf, dimana argumen terkait adalah sebuah
pointer yang menunjuk ke suatu variabel integer. Penspesifikasi konversi % menyebabkan tanda persen ditampilkan.
Penspesifikasi Konversi
|
Penjelasan
|
p
n
%
|
Menampilkan
sebuah nilai pointer.
Menyimpan
jumlah karakter yang telah tertampil di dalam statemen printf. Sebuah pointer
yang menunjuk ke suatu integer disuplai sebagai argumen terkait. Tidak ada
apapun yang ditampilkan.
Menampilkan
karakter persen.
|
Gambar 8.6 | Penspesifikasi konversi lainnya
Pada Gambar 8.7, %p menampilkan nilai dari ptr dan alamat dari x; kedua nilai
tersebut identik karena ptr ditugasi alamat
dari x. Berikutnya, %n menampilkan jumlah karakter yang ditampilkan oleh statemen printf ketiga (baris 15) di dalam variabel
integer y, dan nilai dari y ditampilkan. Statemen printf terakhir (baris 21) menggunakan %% untuk menampilkan karakter % di dalam sebuah
string karakter. Setiap pemanggilan printf menghasilkan
sebuah nilai balik, yaitu jumlah karakter yang ditampilkan atau nilai negatif
jika error terjadi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/* Gambar 8.7: gambar08_07.c */
/* Menggunakan penspesifikasi konversi p, n, dan % */
#include <stdio.h>
int main( void )
{
int *ptr; /* mendefiniskan pointer ke
int */
int x = 12345; /* menginisialisasi
int x */
int y; /* mendefinisikan int y */
ptr = &x; /* menugaskan alamat dari x
kepada ptr */
printf( "Nilai dari ptr adalah
%p\n", ptr );
printf( "Alamat dari x adalah
%p\n\n", &x );
printf( "Total karakter yang
ditampilkan pada baris ini:%n", &y );
printf( " %d\n\n", y );
y = printf( "Baris ini memiliki 31
karakter\n" );
printf( "%d karakter yang
ditampilkan\n\n", y );
printf( "Menampilkan sebuah %% dalam
string kendali format\n" );
return 0; /* indikasi terminasi
sukses */
} /* akhir main */
|
Nilai dari ptr adalah 0018FF40
Alamat dari x adalah 0018FF40
Total karakter yang ditampilkan pada
baris ini: 47
Baris ini memiliki 31 karakter
31 karakter yang ditampilkan
Menampilkan sebuah % dalam string
kendali format
Gambar 8.7 | Menggunakan
penspesifikasi konversi p, n, dan %
8.8 Menampilkan Dengan Lebar Bidang dan
Kepresisian
Ukuran persis dari suatu bidang dimana
di dalamnya data ditampilkan dispesifikasi oleh lebar bidang. Jika lebar bidang
lebih lebar dari data yang akan ditampilkan, maka data normalnya akan
disejajarkan ke kanan di dalam bidang tersebut. Integer yang merepresentasikan
lebar bidang disisipkan di antara tanda persen (%) dan penspesifikasi konversi (seperti, %4d). Gambar 8.8 menampilkan dua grup masing-masing lima angka, disejajarkan
ke kanan bila memuat dijit lebih sedikit dari lebar bidang. Lebar bidang ditambah
untuk menampilkan nilai yang lebih lebar daripada lebar bidang dan bahwa tanda
minus untuk nilai negatif menggunakan satu posisi karakter di dalam lebar
bidang. Lebar bidang dapat digunakan pada semua penspesifikasi konversi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/* Gambar 8.8: gambar08_08.c */
/* Menampilkan integer disejajarkan ke kanan
*/
#include <stdio.h>
int main( void )
{
printf( "%4d\n", 1 );
printf( "%4d\n", 12 );
printf( "%4d\n", 123 );
printf( "%4d\n", 1234 );
printf( "%4d\n\n", 12345 );
printf( "%4d\n", -1 );
printf( "%4d\n", -12 );
printf( "%4d\n", -123 );
printf( "%4d\n", -1234 );
printf( "%4d\n", -12345 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
1
12
123
1234
12345
-1
-12
-123
-1234
-12345
Gambar 8.8 | Menampilkan
integer disejajarkan ke kanan
Fungsi printf juga memampukan Anda untuk menspesifikasi kepresisian atas data yang
ditampilkan. Kepresisian memiliki beberapa arti berbeda untuk tipe data yang
berbeda. Ketika digunakan dengan penspesifikasi konversi integer, kepresisian
mengindikasikan jumlah dijit minimum yang akan ditampilkan. Jika nilai yang
akan ditampilkan memuat dijit yang lebih sedikit daripada kepresisian yang
ditentukan dan nilai kepresisian memiliki kepala nol atau titik desimal, maka
nol tersebut ditempatkan di awal nilai tertampil sampai total jumlah dijit
ekivalen dengan kepresisian. Kepresisian default untuk integer adalah 1. Ketika
digunakan dengan penspesifikasi konversi titik-mengambang (pecahan) e, E, dan f, maka kepresisian adalah jumlah dijit yang muncul setelah
titik desimal. Ketika digunakan dengan penspesifikasi konversi g, dan G, maka
kepresisian adalah jumlah maksimum dari dijit signifikan yang akan ditampilkan.
Ketika digunakan dengan penspesifikasi konversi s, maka kepresisian adalah jumlah karakter maksimum yang akan ditulis dari
string. Untuk menggunakan kepresisian, tempatkan sebuah titik desimal (.),
diikuti dengan sebuah integer yang merepresentasikan kepresisian antara tanda
persen dan penspesifikasi konversi. Gambar 8.9 mendemonstrasikan kegunaan
kepresisian dalam string kendali format.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/* Gambar 8.9: gambar08_09.c */
/* Menggunakan kepresisian ketika
menampilkan integer,
angka pecahan, dan string */
#include <stdio.h>
int main( void )
{
int i = 873; /* menginisialisasi int
i */
double f = 123.94536; /*
menginisialisasi double f */
char s[] = "Selamat Ulang
Tahun"; /* menginisialisasi array char s */
printf( "Menggunakan kepresisian
untuk integer\n" );
printf( "\t%.4d\n\t%.9d\n\n", i, i
);
printf( "Menggunakan kepresisian
untuk angka pecahan\n" );
printf(
"\t%.3f\n\t%.3e\n\t%.3g\n\n", f, f, f );
printf( "Menggunakan kepresisian
untuk string\n" );
printf( "\t%.11s\n", s );
return 0; /* indikasi terminasi
sukses */
} /* akhir main */
|
Menggunakan kepresisian untuk integer
0873
000000873
Menggunakan kepresisian untuk angka
pecahan
123.945
1.239e+002
124
Menggunakan kepresisian untuk string
Selamat Ula
Gambar 8.9 | Menggunakan
kepresisian untuk menampilkan informasi atas beberapa tipe
Lebar bidang dan kepresisian dapat
dikombinasikan dengan menempatkan lebar bidang, diikuti dengan titik desimal,
diikuti dengan suatu kepresisian yang diposisikan di antara tanda persen dan
penspesifikasi konversi, seperti di dalam statemen
printf( "%9.3f", 123.456789 );
yang menampilkan 123.457 dengan tiga
dijit di kanan titik desimal dan disejajarkan ke kanan di dalam suatu bidang
sembilan-dijit.
Adalah hal yang mungkin untuk menspesifikasi lebar
bidang dan kepresisian menggunakan ekspresi integer di dalam daftar argumen
yang mengikuti string kendali format. Untuk menggunakan fitur ini, Anda perlu
menyisipkan asterik (*) menggantikan
lebar bidang atau kepresisian (atau keduanya). Argumen int yang cocok di dalam daftar argumen dievaluasi dan
digunakan. Nilai lebar bidang dapat positif atau negatif (yang menyebabkan
keluaran ditampilkan dengan penyejajaran kiri di dalam bidang). Statemen
printf( "%*.*f", 7, 2, 98.736 );
menggunakan 7 untuk lebar bidang, 2
untuk kepresisian, dan menampilkan nilai 98.74 dengan penyejajaran ke kanan.
8.9 Menggunakan Flag Pada String
Kendali Format printf
Fungsi printf juga menyediakan bendera untuk menambah kapabilitas pemformatan tampilan.
Lima bendera tersedia untuk digunakan di dalam string kendali format (Gambar
8.10). Untuk menggunakan bendera di dalam string kendali format, Anda perlu
menempatkan bendera tepat di kanan tanda persen. Beberapa bendera dapat
digabungkan di dalam satu penspesifikasi konversi.
Penspesifikasi Konversi
|
Penjelasan
|
-(tanda minus)
+ (tanda plus)
spasi
#
0 (nol)
|
Menyejajarkan
ke kiri keluaran dengan bidang terspesifikasi.
Menampilkan
tanda plus sebelum nilai positif dan tanda minus sebelum nilai negatif.
Menampilkan
spasi sebelum nilai positif, tetapi tidak ditampilkan dengan bendera +.
Prefiks 0
untuk nilai keluaran digunakan ketika digunakan pada penspesifikasi oktal o.
Prefiks 0x atau 0X untuk nilai keluaran digunakan ketika digunakan pada penspesifikasi
heksadesimal x atau X. Prefiks 0 untuk nilai keluaran digunakan ketika
digunakan pada penspesifikasi oktal o.
Memaksa titik
desimal untuk angka pecahan agar ditampilkan dengan e, E, f, g, atau G yang
tidak memuat bagian fraksional. (Normalnya titik desimal ditampilkan hanya
jika satu dijit mengikuti titik desimal). Untuk penspsifikasi g dan G, buntut
nol tidak dihapus.
Mengganjal
lebar bidang dengan nol di depan.
|
Gambar 8.10 | Bendera string kendali format
Gambar 8.11 mendemonstrasikan penyejajaran
kanan dan penyejajaran kiri atas sebuah string, integer, karakter, dan angka
pecahan.
1
2
3
4
5
6
7
8
9
10
|
/* Gambar 8.11: gambar08_11.c */
/* Penyejajaran kanan dan penyejajaran kiri
*/
#include <stdio.h>
int main( void )
{
printf( "%10s%10d%10c%10f\n\n", "hallo",
7, 'a', 1.23 );
printf( "%-10s%-10d%-10c%-10f\n", "hallo",
7, 'a', 1.23 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
hallo 7 a
1.230000
hallo 7
a 1.230000
Gambar 8.11 | Penyejajaran
kiri dan penyejajaran kanan
Gambar 8.12 menampilkan angka positif
dan angka negatif, masing-masing dengan dan tanpa bendera +. Tanda minus
ditampilkan pada kedua kasus, tetapi tanda plus hanya ditampilkan ketika
bendera + digunakan.
1
2
3
4
5
6
7
8
9
10
|
/* Gambar 8.12: gambar08_12.c */
/* Menampilkan angka dengan dan tanpa
bendera + */
#include <stdio.h>
int main( void )
{
printf( "%d\n%d\n", 786, -786 );
printf( "%+d\n%+d\n", 786, -786 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
786
-786
+786
-786
Gambar 8.12 | Menampilkan
nilai negatif dan nilai positif dengan dan tanpa bendera +
Gambar 8.13 menyajikan prefiks spasi
pada angka positif dengan bendera spasi. Ini berguna untuk menyejajarkan nilai
negatif dan nilai positif dengan jumlah dijit yang sama. Nilai -547 tidak
diprefiks dengan spasi pada keluaran karena tanda minusnya.
1
2
3
4
5
6
7
8
9
10
|
/* Gambar 8.13: gambar08_13.c */
/* Menampilkan spasi sebelum nilai bertanda
yang tidak diawali dengan + atau - */
#include <stdio.h>
int main( void )
{
printf( "% d\n% d\n", 547, -547 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
547
-547
Gambar 8.13 | Menggunakan
bendera spasi
Gambar 8.14 menggunakan bendera # untuk ditempatkan di depan 0 pada nilai oktal dan di depan
0x atau 0X untuk nilai heksadesimal, dan memaksa titik desimal agar ditampilkan
pada sebuah nilai yang ditampilkan dengan g.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/* Gambar 8.14: gambar08_14.c */
/* Menggunakan bendera # dengan
penspesifikasi konversi
o,
x, X dan sembarang penspesifikasi titik-mengambang */
#include <stdio.h>
int main( void )
{
int
c = 1427; /* menginisialisasi c */
double
p = 1427.0; /* menginisialisasi p */
printf( "%#o\n", c );
printf( "%#x\n", c );
printf( "%#X\n", c );
printf( "\n%g\n", p );
printf( "%#g\n", p );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
02623
0x593
0X593
1427
1427.00
Gambar 8.14 | Menggunakan
bendera #
Gambar 8.15 menggabungkan bendera + dan
bendera 0 (nol) untuk menampilkan 452 dan sebuah bidang 9-spasi dengan tanda +
dan beberapa nol di kepala, kemudian menampilkan 452 kembali hanya menggunakan
bendera 0 dan sebuah bidang 9-spasi.
1
2
3
4
5
6
7
8
9
10
|
/* Gambar 8.15: gambar08_15.c */
/* Menampilkan dengan bendera 0( nol ) untuk
mengisi kepala nol */
#include <stdio.h>
int main( void )
{
printf( "%+09d\n", 452 );
printf( "%09d\n", 452 );
return 0; /* indikasi terminasi
sukses */
} /* akhir main */
|
+00000452
000000452
Gambar 8.15 | Menggunakan
bendera 0 (nol)
8.10 Menampilkan Literal dan Runtun
Escape
Kebanyakan karakter literal agar bisa
ditampilkan di dalam sebuah statemen printf cukup disertakan di dalam string kendali format. Namun, ada beberapa
“permasalahan” karakter seperti tanda kutip (“) yang membatasi string kendali
format itu sendiri. Berbagai karakter kontrol, seperti karakter garis-baru dan
tab, harus direpresentasikan dengan runtun escape.
Runtun escape direpresentasikan dengan sebuah backslash (\), diikuti dengan karakter escape tertentu. Gambar 8.16 mencantumkan beberapa runtun escape dan aksi yang diakibatkan.
Runtun escape
|
Penjelasan
|
\’ (kutip tunggal)
\” (kutip ganda)
\? (tanda tanya)
\\ (backslash)
\a (alert atau bel)
\b (backspace)
\f (formfeed)
\n (garis-baru)
\r (carriage return)
\t (tab horisontal)
\v (tab vertikal)
|
Menampilkan
karakter kutip tunggal (‘).
Menampilkan
karakter kutip ganda(“).
Menampilkan
karakter tanda tanya (?).
Menampilkan
karakter backslash (\)
Menyebabkan
bel berbunyi.
Menggerakkan
kursor satu posisi mundur.
Menggerakkan
kursor ke halaman berikutnya.
Menggerakkan
kursor ke baris berikutnya.
Menggerakkan
kursor ke awal baris.
Menggerakkan
kursor awal posisi tab horisontal berikutnya.
Menggerakkan
kursor awal posisi tab vertikal berikutnya.
|
Gambar 8.16 | Runtun escape
8.11 Membaca Masukan Terformat Dengan
scanf
Pemformatan masukan dengan tepat dapat
dilakukan dengan scanf. Setiap
statemen scanf memuat sebuah string kendali format
yang mendeskripsikan format data yang akan dimasukkan. String kendali format
memuat penspesifikasi konversi dan karakter literal. Fungsi scanf ditulis dengan format sebagai berikut:
scanf( string-kendali-format, argumen-lainnya );
string-kendali-format mendeskripsikan format masukan, dan argumen-lainnya merupakan pointer ke variabel dimana
di dalamnya masukan disimpan.
Gambar 8.17 menyimpulkan beberapa
penspesifikasi konversi yang digunakan untuk memasukkan semua tipa data.
Beberapa program juga disediakan untuk mendemonstrasikan pembacaan data dengan
berbagai penspesifikasi konversi scanf.
Penspesifikasi Konversi
|
Penjelasan
|
integer
d
i
o
u
x atau X
h atau l
Angka Pecahan
e, E, f, g, atau G
l atau L
Karakter dan string
c
s
Lainnya
p
n
%
|
Membaca
integer desimal bertanda. Argumen terkait adalah sebuah pointer yang menunjuk
ke suatu int.
Membaca
integer desimal, oktal, atau heksadesimal bertanda. Argumen terkait adalah
sebuah pointer yang menunjuk ke suatu int.
Membaca sebuah
integer oktal. Argumen terkait adalah sebuah pointer yang menunjuk ke suatu unsigned int.
Membaca sebuah
integer desimal tak-bertanda. Argumen terkait adalah sebuah pointer yang
menunjuk ke suatu unsigned int.
Membaca sebuah
integer heksadesimal tak-bertanda. Argumen terkait adalah sebuah pointer yang
menunjuk ke suatu unsigned int.
Ditempatkan
sebelum sembarang penspesifikasi konversi integer untuk mengindikasikan bahwa
sebuah integer short atau long yang akan
dimasukkan.
Membaca suatu
nilai pecahan (titik-mengambang). Argumen terkait adalah pointer ke suatu
variabel titik-mengambang.
Ditempatkan
sebelum sembarang penspesifikasi konversi titik-mengambang untuk
mengindikasikan bahwa sebuah integer double atau long double yang akan
dimasukkan. Argumen terkait adalah pointer ke suatu variabel double atau long double.
Membaca sebuah
karakter. Argumen terkait adalah sebuah pointer ke suatu char; tidak ada
karakter null (‘\0’) yang ditambahkan.
Membaca sebuah
string. Argumen terkait adalah sebuah pointer ke suatu array bertipe char yang cukup
besar untuk menampung string dan sebuah karakter null penghenti (‘\0’), yang
secara otomatis ditambahkan.
Membaca alamat
ketika alamat dihasilkan dengan %p di dalam statemen printf.
Menyimpan
jumlah karakter yang dimasukkan sejauh ini pada pemanggilan scanf. Argumen
terkait adalah sebuah pointer ke suatu int.
Melompati
tanda persen (%) di dalam masukan.
|
Gambar 8.17 | Penspesifikasi konversi untuk scanf
Gambar 8.18 membaca beberapa integer
dengan berbagai penspesifikasi konversi integer dan menampilkannya sebagai
angka desimal. Penspesifikasi konversi %i dapat dipakai untuk memasukkan integer desimal, oktal, dan heksadesimal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/* Gambar 8.18: gambar08_18.c */
/* Membaca beberapa integer */
#include <stdio.h>
int main( void )
{
int
a;
int
b;
int
c;
int
d;
int
e;
int
f;
int
g;
printf( "Masukkan tujuh buah integer: " );
scanf( "%d%i%i%i%o%u%x",
&a, &b, &c, &d, &e, &f, &g );
printf( "Masukan ditampilkan sebagai integer desimal:\n"
);
printf( "%d %d %d %d
%d %d %d\n", a, b, c, d, e, f, g );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
+00000452
000000452
Gambar 8.18 | Pembacaan
masukan dengan penspesifikasi konversi integer
Ketika membaca angka pecahan, sembarang
penspesifikasi konversi titik-mengambang e, E, f, g, atau G dapat digunakan. Gambar 8.19
membaca tiga angka pecahan, masing-masing dengan penspesifikasi konversi titik-mengambang
tertentu, dan menampilkan ketiga angka dengan penspesifikasi konversi f.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/* Gambar 8.19: gambar08_19.c */
/* Membaca angka pecahan */
#include <stdio.h>
/* fungsi main untuk memulai eksekusi
program */
int main( void )
{
double
a;
double
b;
double
c;
printf( "Masukkan tiga angka pecahan: \n" );
scanf( "%le%lf%lg",
&a, &b, &c );
printf( "Angka-angka yang dimasukkan dalam\n" );
printf( "notasi titik-mengambang:\n" );
printf(
"%f\n%f\n%f\n", a, b, c );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Masukkan tiga angka pecahan:
1.27987 1.27987e+03 3.38476e-06
Angka-angka yang dimasukkan dalam
notasi titik-mengambang:
1.279870
1279.870000
0.000003
Gambar 8.19 | Pembacaan
masukan dengan penspesifikasi konversi titik-mengambang
Karakter dan string dimasukkan/dibaca
menggunakan penspesifikasi konversi c dan s. Gambar 8.20 meminta pengguna untuk memasukkan sebuah
string. Program membaca karakter pertama string dengan %c dan menyimpannya di dalam variabel karakter x, dan kemudian membaca sisa string dengan %s dan menyimpannya di dalam array karakter y.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/* Gambar 8.20: gambar08_20.c */
/* Membaca karakter dan string */
#include <stdio.h>
int main( void )
{
char x;
char y[ 9 ];
printf( "Masukkan sebuah string:
" );
scanf( "%c%s", &x, y );
printf( "Masukan adalah:\n"
);
printf( "karakter
\"%c\" ", x );
printf( "dan string
\"%s\"\n", y );
return 0; /* indikasi terminasi
sukses */
} /* akhir main */
|
Masukkan sebuah string: Mataram
Masukan adalah:
karakter "M" dan string
"ataram"
Gambar 8.20 | Pembacaan
karakter dan string
Runtun karakter dapat dibaca
menggunakan suatu himpunan scan. Himpunan scan merupakan himpunan karakter yang
diapit oleh dua kurung siku, [ ], dan diawali dengan tanda persen di dalam
string kendali format. Himpunan scan memindai karakter di dalam aliran masukan,
mencari karakter yang cocok dengan karakter yang dimuat di dalam himpunan scan.
Setiap kali sebuah karakter cocok, ia disimpan di dalam argumen terkait, yang
merupakan sebuah pointer yang menunjuk ke suatu array karakter. Himpunan
karakter berhenti membaca karakter ketika dijumpai sebuah karakter yang tidak
dimuat di dalam himpunan scan. Jika karakter pertama di dalam aliran masukan
tidak cocok dengan sebuah karakter di dalam himpunan scan, maka hanya karakter
null yang disimpan di dalam array. Gambar 8.21 menggunakan himpunan scan [aeiou] untuk memindai aliran masukan dalam mencari vokal.
Perhatikan bahwa tujuh huruf pertama dari masukan terbaca. Huruf kedelapan (h) tidak adalah di dalam himpunan scan dan oleh karena itu
pemindaian berhenti.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/* Gambar 8.21: gambar08_21.c */
/* Menggunakan himpunan scan */
#include <stdio.h>
/* fungsi main memulai eksekusi program */
int main( void )
{
char
z[ 9 ]; /* define array z */
printf( "Masukkan string: " );
scanf( "%[aeiou]", z
); /* mencari himpunan karakter */
printf( "Masukan adalah \"%s\"\n", z );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Masukkan string: ooeeooahah
Masukan adalah "ooeeooa"
Gambar 8.21 | Menggunakan
himpunan scan
Himpunan scan dapat pula dipakai untuk
memindai karakter-karakter yang tidak dimuat di dalam himpunan scan menggunakan
himpunan scan terbalik. Untuk menciptakan himpunan scan terbalik, dipakai
sebuah caret (^) yang diapit oleh
sepasang kurung siku dan ditempatkan sebelum karakter-karakter scan. Ini
mengakibatkan karakter yang tidak dimuat di dalam himpunan scan disimpan.
Ketika sebuah karakter yang dimuat di dalam himpunan scan terbalik dijumpai,
pemindaian akan berhenti. Gambar 8.22 menggunakan himpunan scan terbalik [^aeiou] untuk mencari konsonan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/* Gambar 8.22: gambar08_22.c */
/* Menggunakan himpunan scan terbalik */
#include <stdio.h>
int main( void )
{
char
z[ 9 ];
printf( "Masukkan sebuah string: " );
scanf( "%[^aeiou]",
z ); /* himpunan scan terbalik */
printf( "Masukan adalah \"%s\"\n", z );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Masukkan sebuah string: string
Masukan adalah "str"
Gambar 8.22 | Menggunakan
himpunan scan terbalik
Lebar bidang dapat dipakai di dalam
penspesifikasi konversi scanf untuk membaca
sejumlah tertentu karakter dari aliran masukan. Gambar 8.23 membaca sederet
dijit sebagai sebuah integer dua-dijit dan sebuah integer yang memuat dijit
tersisa di dalam aliran masukan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/* Gambar 8.23: gambar08_23.c */
/* Membaca data dengan suatu lebar bidang */
#include <stdio.h>
int main( void )
{
int
x;
int
y;
printf( "Masukkan enam dijit
integer: " );
scanf( "%2d%d", &x, &y );
printf( "Masukan integer adalah %d
dan %d\n", x, y );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Masukkan enam dijit integer: 123456
Masukan integer adalah 12 dan 3456
Gambar 8.23 | Membaca data
dengan suatu bidang data
Kesimpulan
§
Semua masukan dan keluaran dilakukan dengan aliran, yang merupakan runtun
byte. Dalam operasi masukan, byte demi byte mengalir dari sebuah divais
(papan-ketik, disk drive, atau
koneksi jaringan) ke memori utama. Dalam operasi keluaran, byte demi byte mengalir
dari memori utama ke suatu divais (layar, printer, disk drive, koneksi jaringan, dan seterusnya).
§
Pemformatan keluaran secara presisi disediakan oleh printf. Setiap pemanggilan printf memuat sebuah string kendali format
yang mendeskripsikan format keluaran. String kendali format terdiri-dari
penspesifikasi konversi, flag
(bendera), lebar bidang, kepresisian, dan karakter literal. Digabungkan dengan
tanda persen (%), string kendali tersebut membentuk spesifikasi konversi.
§
Nilai pecahan memuat sebuah titik desimal seperti di dalam 33.5, 0.0, atau
-345.654. Nilai pecahan ditampilkan dalam beberapa format.
§
Penspesifikasi konversi e dan E menampilkan nilai pecahan dalam notasi
eksponensial, yang merupakan ekivalen dengan notasi saintifik yang digunakan dalam
matematika.
§
Penspesifikasi konversi g (atau G) menampilkan format e (E) atau f tanpa adanya buntut nol (misalnya, 1.234000
ditampilkan sebagai 1.234). Nilai ditampilkan dengan format e (E) jika, setelah dikonversi ke notasi eksponensial, nilai
eksponen kurang dari -4, atau nilai eksponen lebih dari atau sama dengan
kepresisian yang ditentukan (enam dijit secara default untuk g dan G). Sebaliknya, penspesifikasi konversi f digunakan untuk menampilkan nilai
tersebut. Buntut nol tidak ditampilkan pada bagian pecahan (fraksional) dari
suatu nilai yang ditampilkan dengan g atau G.
§
Penspesifikasi konversi c dan s digunakan untuk menampilkan karakter
individual dan string. Penspesifikasi konversi c memerlukan sebuah argumen char. Penspesifikasi konversi s memerlukan sebuah pointer yang menunjuk ke char sebagai argumen. Penspesifikasi
konversi s menyebabkan
karakter-karakter ditampilkan sampai ditemukan karakter null penghenti (‘\0’).
§
Penspesifikasi konversi %n menyimpan jumlah karakter yang ditampilkan sejauh ini
pada printf, dimana argumen terkait adalah sebuah pointer yang menunjuk ke suatu
variabel integer. Penspesifikasi konversi % menyebabkan tanda persen ditampilkan.
§
Ukuran persis dari suatu bidang dimana di dalamnya data ditampilkan
dispesifikasi oleh lebar bidang. Jika lebar bidang lebih lebar dari data yang
akan ditampilkan, maka data normalnya akan disejajarkan ke kanan di dalam
bidang tersebut. Integer yang merepresentasikan lebar bidang disisipkan di
antara tanda persen (%) dan
penspesifikasi konversi (seperti, %4d).
§
Fungsi printf juga memampukan Anda untuk menspesifikasi kepresisian atas data yang
ditampilkan. Kepresisian memiliki beberapa arti berbeda untuk tipe data yang
berbeda. Ketika digunakan dengan penspesifikasi konversi integer, kepresisian
mengindikasikan jumlah dijit minimum yang akan ditampilkan. Jika nilai yang
akan ditampilkan memuat dijit yang lebih sedikit daripada kepresisian yang
ditentukan dan nilai kepresisian memiliki kepala nol atau titik desimal, maka
nol tersebut ditempatkan di awal nilai tertampil sampai total jumlah dijit
ekivalen dengan kepresisian. Kepresisian default untuk integer adalah 1. Ketika
digunakan dengan penspesifikasi konversi titik-mengambang (pecahan) e, E, dan f, maka
kepresisian adalah jumlah dijit yang muncul setelah titik desimal. Ketika
digunakan dengan penspesifikasi konversi g, dan G, maka
kepresisian adalah jumlah maksimum dari dijit signifikan yang akan ditampilkan.
Ketika digunakan dengan penspesifikasi konversi s, maka kepresisian adalah jumlah karakter maksimum yang akan
ditulis dari string. Untuk menggunakan kepresisian, tempatkan sebuah titik
desimal (.), diikuti dengan sebuah integer yang merepresentasikan kepresisian
antara tanda persen dan penspesifikasi konversi.
§
Lebar bidang dan kepresisian dapat dikombinasikan dengan menempatkan lebar
bidang, diikuti dengan titik desimal, diikuti dengan suatu kepresisian yang
diposisikan di antara tanda persen dan penspesifikasi konversi.
§
Fungsi printf juga menyediakan bendera untuk menambah kapabilitas pemformatan tampilan.
Lima bendera tersedia untuk digunakan di dalam string kendali format. Untuk
menggunakan bendera di dalam string kendali format, Anda perlu menempatkan
bendera tepat di kanan tanda persen.
§
Kebanyakan karakter literal agar bisa ditampilkan di dalam sebuah statemen
printf cukup disertakan di dalam string
kendali format. Namun, ada beberapa “permasalahan” karakter seperti tanda kutip
(“) yang membatasi string kendali format itu sendiri. Berbagai karakter
kontrol, seperti karakter garis-baru dan tab, harus direpresentasikan dengan
runtun escape. Runtun escape
direpresentasikan dengan sebuah backslash
(\), diikuti dengan karakter escape
tertentu.
§
Pemformatan masukan dengan tepat dapat dilakukan dengan scanf. Setiap statemen scanf memuat sebuah string kendali format
yang mendeskripsikan format data yang akan dimasukkan. String kendali format
memuat penspesifikasi konversi dan karakter literal.
§
Runtun karakter dapat dibaca menggunakan suatu himpunan scan. Himpunan
scan merupakan himpunan karakter yang diapit oleh dua kurung siku, [ ], dan
diawali dengan tanda persen di dalam string kendali format. Himpunan scan
memindai karakter di dalam aliran masukan, mencari karakter yang cocok dengan
karakter yang dimuat di dalam himpunan scan. Setiap kali sebuah karakter cocok,
ia disimpan di dalam argumen terkait, yang merupakan sebuah pointer yang
menunjuk ke suatu array karakter. Himpunan karakter berhenti membaca karakter
ketika dijumpai sebuah karakter yang tidak dimuat di dalam himpunan scan. Jika
karakter pertama di dalam aliran masukan tidak cocok dengan sebuah karakter di
dalam himpunan scan, maka hanya karakter null yang disimpan di dalam array.
§
Himpunan scan dapat pula dipakai untuk memindai karakter-karakter yang
tidak dimuat di dalam himpunan scan menggunakan himpunan scan terbalik. Untuk
menciptakan himpunan scan terbalik, dipakai sebuah caret (^) yang diapit oleh sepasang kurung siku dan ditempatkan sebelum
karakter-karakter scan. Ini mengakibatkan karakter yang tidak dimuat di dalam
himpunan scan disimpan. Ketika sebuah karakter yang dimuat di dalam himpunan
scan terbalik dijumpai, pemindaian akan berhenti.
Soal
1) Carilah kesalahan pada tiap segmen program
berikut. Jelaskan bagaimana kesalahan tersebut dikoreksi.
a) printf(
"%s\n", 'Selamat Ulang Tahun' );
b) printf(
"%c\n", 'Hallo' );
c) printf(
"%c\n", "Ini adalah sebuah string" );
d) printf(
""%s"", "Gunung Rinjani" );
e) char day[]
= "Mataram";
printf( "%s\n", day[ 3 ] );
f) printf(
Masukkan nama Anda: '
);
g) printf(
%f, 123.456 );
h) printf(
"%s%s\n", 'O', 'K' );
i) char s[ 10 ];
scanf( "%c", s[ 7 ] );
2)
Tulislah suatu program yang menguji perbedaan
antara penspesifikasi %d dan %i ketika digunakan di dalam dua statemen berikut:
scanf( "%i%d", &x, &y );
printf( "%d %d\n", x, y );
3)
Tulislah suatu program yang mengisi sebuah array angka 10-elemen
dengan integer acak 1 sampai 1000. Untuk setiap nilai, tampilkan dan hitung
total berjalan atas jumlah karakter yang ditampilkan. Gunakan penspesifikasi
konversi %s untuk
menentukan jumlah karakter yang ditampilkan pada tiap nilai.
4)
Tulislah sebuah program untuk menampilkan nilai
pointer menggunakan semua penspesifikasi konversi integer dan penspesifikasi
konversi %p. Manakah yang
menampilkan nilai yang aneh? Manakah yang menyebabkan error?
5)
Tulislah sebuah program untuk menguji hasil dalam
menampilkan nilai integer 12345 dan nilai pecahan 1.2345 pada berbagai ukuran
bidang. Apakah yang terjadi ketika nilai ditampilkan dalam bidang yang memuat
dijit lebih sedikit daripada nilai tersebut?
6)
Tulislah sebuah program yang menampilkan nilai
100.453627 dan yang membulatkannya menjadi dijit integer terdekat, menjadi pecahan
dengan satu dijit di belakang titik desimal, menjadi pecahan dengan dua dijit di belakang
titik desimal, menjadi pecahan dengan tiga dijit di belakang titik desimal, dan
menjadi pecahan dengan empat dijit di belakang titik desimal.
7)
Tulislah sebuah program yang membaca suatu string
dari papan-ketik dan yang menentukan panjang string tersebut. Tampilkan string
menggunakan lebar bidang dengan lebar dua kali string tersebut.
8)
Tulislah suatu program yang mengkonversi
temperatur Fahrenheit dari 0 sampai 121 menjadi temperatur Celcius dengan kepresisian 3
dijit. Lakukan perhitungan menggunakan formula celsius = 5.0 / 9.0 * ( fahrenheit - 32 ).
9)
Tulislah suatu program yang menguji semua runtun escape pada Gambar 8.16. Untuk semua
runtun escape yang
memindahkan/menggerakkan kursor, tampilkan sebuah karakter sebelum dan setelah
penggunaan runtun escape sehingga
jelas dimana kursor dipindahkan.
10)
Tulislah suatu program yang menentukan apakah ?
dapat ditampilkan sebagai bagian dari string kendali format printf seperti halnya
sebagai karakter literal.
11)
Tulislah sebuah program yang membaca nilai 437
menggunakan penspesifikasi konversi integer scanf. Tampilkan
setiap nilai masukan menggunakan semua penspesifikasi konversi integer.
12)
Tulislah sebuah program yang menggunakan semua
penspesifikasi konversi e, f, dan g untuk membaca nilai 1.2345. Tampilkan nilai
setiap variabel untuk membuktikan bahwa setiap penspesifikasi konversi dapat
dipakai untuk membaca nilai yang sama.
13)
Dalam beberapa bahasa pemrograman, string diapit
oleh tanda baca kutip tunggal atau kutip ganda. Tulislah sebuah program yang
membaca tiga string medan, “medan”, dan ‘medan’. Apakah kutip tunggal dan kutip ganda
diabaikan oleh C atau dibaca sebagai bagian dari string tersebut?
14)
Tulislah sebuah program yang menentukan apakah ?
dapat ditampilkan sebagai konstanta karakter ‘?’ dan bukan sebagai runtun
escape konstanta karakter ‘\?’ menggunakan penspesifikasi %c dalam string
kendali format pada suatu statemen printf.
15)
Tulislah sebuah program yang menggunakan
penspesifikasi konversi g untuk menampilkan nilai 9876.12345. Tampilkan nilai
tersebut dengan kepresisian bervariasi dari 1 sampai 9.
No comments:
Post a Comment