Friday, December 23, 2016

Bab 8. Pemrograman C Belajar Dari Contoh



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