Scanf C deskripsi fungsi
Scanf C deskripsi fungsi

Video: Scanf C deskripsi fungsi

Video: Scanf C deskripsi fungsi
Video: Apakah Ternak Ayam Petelur Harus Ada Pejantan | Tanya Jawab 2024, Mungkin
Anonim

Dalam artikel ini, fungsi scanf() dianggap dalam bentuk umum tanpa mengacu pada standar tertentu, jadi data dari standar C99, C11, C++11, C++14 disertakan di sini. Mungkin, dalam beberapa standar, fungsinya bekerja dengan perbedaan dari materi yang disajikan dalam artikel.

scanf fungsi C - deskripsi

scanf() adalah fungsi yang terletak di file header stdio.h(C) dan cstdio(C++), juga dikenal sebagai input program yang diformat. scanf membaca karakter dari aliran input standar (stdin) dan mengubahnya sesuai dengan format, kemudian menulisnya ke variabel yang ditentukan. Format - berarti bahwa data diubah ke bentuk tertentu setelah diterima. Dengan demikian, fungsi scanf C dijelaskan:

scanf("%format", &variable1[, &variable2, […]), dimana variabel dilewatkan sebagai alamat. Alasan cara melewatkan variabel ke fungsi ini jelas: sebagai hasil kerja, ia mengembalikan nilai yang menunjukkan adanya kesalahan, jadisatu-satunya cara untuk mengubah nilai variabel adalah dengan melewati alamat. Juga, berkat metode ini, fungsi ini dapat memproses data jenis apa pun.

Beberapa programmer menyebut fungsi seperti scanf() atau printf() sebagai prosedur karena analoginya dengan bahasa lain.

Scanf memungkinkan input dari semua jenis bahasa dasar: char, int, float, string, dll. Untuk variabel bertipe string, tidak perlu menentukan tanda alamat - "&", karena variabel bertipe string adalah array, dan namanya adalah alamat elemen pertama array di memori komputer.

Menggunakan C dalam C++
Menggunakan C dalam C++

Format entri data atau string kontrol

Mulailah dengan melihat contoh fungsi scanf C dari deskripsi.


include int main() { int x; while (scanf("%d", &x)==1) printf("%d\n", x); kembali 0; //persyaratan untuk sistem linux }

Format input terdiri dari empat parameter berikut: %[width][modifiers] type. Dalam hal ini, tanda "%" dan tipenya adalah parameter wajib. Artinya, format minimum terlihat seperti ini: “%s”, “%d” dan seterusnya.

Secara umum karakter yang membentuk format string dibagi menjadi:

  • format specifier - apapun yang dimulai dengan %;
  • memisahkan atau karakter spasi - mereka adalah spasi, tab(t), baris baru (n);
  • karakter selain spasi.

Fungsi mungkin tidak aman.

Gunakan scanf_s() daripada scanf().

(pesan dari Visual Studio)

Jenis, atau penentu format, atau karakter konversi, atau karakter kontrol

Kode biner
Kode biner

Deklarasi scanf C harus berisi setidaknya penentu format, yang ditentukan di akhir ekspresi yang dimulai dengan "%". Ini memberitahu program jenis data yang diharapkan saat masuk, biasanya dari keyboard. Daftar semua penentu format pada tabel di bawah ini.

Tipe Arti
1 %c Program sedang menunggu input karakter. Variabel yang akan ditulis harus bertipe karakter char.
2 %d Program mengharapkan input bilangan desimal tipe integer. Variabel harus bertipe int.
3 %i Program mengharapkan input bilangan desimal tipe integer. Variabel harus bertipe int.
4 %e, %E Program mengharapkan untuk memasukkan angka floating point (koma) dalam bentuk eksponensial. Variabel harus bertipe float.
5 %f Program mengharapkan angka floating point (koma). Variabel harus bertipe float.
6 %g, %G Program mengharapkan angka floating point (koma). Variabel harus bertipe float.
7 %a Program mengharapkan angka floating point (koma). Variabel harus bertipe float.
8 %o Program mengharapkan bilangan oktal. Variabel harus bertipe int.
9 %s Program menunggu string dimasukkan. String adalah kumpulan karakter apa pun hingga karakter pemisah pertama yang ditemukan. Variabel harus bertipe string.

10

%x, %X Program sedang menunggu bilangan heksadesimal. Variabel harus bertipe int.
11 %p Variabel mengharapkan input pointer. Variabel harus bertipe pointer.
12 %n Menulis ke variabel nilai integer yang sama dengan jumlah karakter yang dibaca sejauh ini oleh fungsi scanf.
13 %u Program membaca bilangan bulat yang tidak ditandatangani. Jenis variabel harus berupa bilangan bulat yang tidak ditandatangani.
14 %b Program sedang menunggu bilangan biner. Variabel harus bertipe int.
15 % Set karakter yang dipindai. Program sedang menunggu karakter yang akan dimasukkan.dari kumpulan terbatas yang ditentukan di antara tanda kurung siku. scanf akan bekerja selama ada karakter dari set yang ditentukan pada aliran input.
16 %% Tanda "%".

Karakter dalam format string

kode C++
kode C++

simbol Bintang ()

Tanda bintang () adalah tanda yang menunjukkan bahwa operasi penugasan harus dihentikan. Tanda bintang ditempatkan segera setelah tanda "%". Misalnya,


scanf("%d%c%d", &x, &y); //abaikan karakter antara dua bilangan bulat. scanf("%s%d%s", str, str2); //abaikan integer antara dua string.

Artinya, jika Anda memasukkan baris "45-20" di konsol, program akan melakukan hal berikut:

  1. Variabel "x" akan diberi nilai 45.
  2. Variabel "y" akan diberi nilai 20.
  3. Dan tanda minus (tanda hubung) "-" akan diabaikan karena "%c".

Lebar (atau lebar bidang)

Ini adalah bilangan bulat antara tanda "%" dan penentu format yang menentukan jumlah karakter maksimum untuk dibaca dalam operasi baca saat ini.


scanf("%20s", str); //membaca 20 karakter pertama dari input stream

Ada beberapa hal penting yang perlu diingat:

  1. scanf akan dihentikan jika menemukan karakter pemisah, meskipun tidak menghitung 20 karakter.
  2. Jika lebih dari 20 karakter yang dimasukkan, hanya 20 karakter pertama yang akan ditulis ke str.

Pengubahketik (atau presisi)

kode percikan
kode percikan

Ini adalah flag khusus yang mengubah tipe data yang diharapkan untuk input. Bendera ditentukan di sebelah kiri penentu tipe:

  • L atau l (L kecil) Ketika "l" digunakan dengan penentu d, i, o, u, x, flag memberitahu program bahwa input int panjang diharapkan. Saat menggunakan "l" dengan specifier e atau f, flag memberitahu program bahwa ia harus mengharapkan nilai ganda. Penggunaan "L" memberitahu program bahwa double panjang diharapkan. Penggunaan "l" dengan penentu "c" dan "s" memberi tahu program bahwa karakter dua byte seperti wchar_t diharapkan. Misalnya, "%lc", "%ls", "%l[asd]".
  • h adalah bendera yang menunjukkan tipe pendek.
  • hh - menunjukkan bahwa variabel adalah penunjuk ke char yang ditandatangani atau nilai char yang tidak ditandatangani. Bendera dapat digunakan dengan penentu d, i, o, u, x, n.
  • ll (dua L kecil) - menunjukkan bahwa variabel adalah penunjuk ke nilai bertipe signed long long int atau unsigned long long int. Bendera digunakan dengan penentu: d, i, o, u, x, n.
  • j - menunjukkan bahwa variabel adalah penunjuk ke tipe intmax_t atau uintmax_t dari file header stdint.h. Digunakan dengan penentu: d, i, o, u, x, n.
  • z - menunjukkan bahwa variabel adalah penunjuk ke tipe size_t, yang definisinya ada di stddef.h. Digunakan dengan penentu: d, i, o, u, x, n.
  • t - menunjukkan bahwa variabel adalah penunjuk ke tipe ptrdiff_t. definisi padajenis ini ada di stddef.h. Digunakan dengan penentu: d, i, o, u, x, n.

Lebih jelasnya, gambar dengan pengubah dapat direpresentasikan sebagai tabel. Deskripsi scanf C untuk programmer akan lebih jelas.

Tipe Penentu dan Pengubah
Tipe Penentu dan Pengubah

Karakter lain

Setiap karakter yang ditemukan dalam format akan dibuang. Pada saat yang sama, perlu dicatat bahwa keberadaan karakter spasi atau pemisah (baris baru, spasi, tab) dalam string kontrol dapat menyebabkan perilaku fungsi yang berbeda. Dalam satu versi, scanf() akan membaca tanpa menyimpan sejumlah pemisah sampai menemukan karakter selain pemisah, dan di versi lain, spasi (hanya mereka) tidak berperan dan ekspresi "%d + %d" setara dengan "% d+%d".

Contoh kode C++
Contoh kode C++

Contoh

Mari kita lihat beberapa contoh untuk membantu Anda berpikir dan lebih memahami cara kerja fungsi.


scanf("%3s", str); //jika Anda memasukkan string "1d2s3d1;3" di konsol, hanya "1d2" yang akan ditulis ke str scanf("%dminus%d", &x, &y); //minus karakter di antara dua angka akan dibuang scanf("%5[0-9]", str); // karakter akan dimasukkan ke dalam str sampai ada 5 karakter dan karakter berupa angka dari 0 sampai 9. scanf("%lf", &d); //harapkan input ganda scanf("%hd", &x); //harapan jumlah tipe short scanf("%hu", &y); //mengharapkan nomor yang tidak ditandatangani short scanf("lx", &z); //harapan jumlah tipe long int

DariContoh di bawah ini menunjukkan bagaimana angka yang diharapkan berubah menggunakan simbol yang berbeda.

scanf C - deskripsi untuk pemula

Bagian ini akan berguna untuk pemula. Seringkali Anda tidak perlu memiliki deskripsi lengkap tentang scanf C melainkan detail tentang cara kerja fungsi.

  • Fitur ini agak usang. Ada beberapa implementasi yang berbeda di perpustakaan dari versi yang berbeda. Misalnya, fungsi scanf S C yang ditingkatkan, deskripsinya dapat ditemukan di situs web microsoft.
  • Jumlah penentu dalam format harus sesuai dengan jumlah argumen yang diteruskan ke fungsi.
  • Elemen aliran input harus dipisahkan hanya dengan karakter pemisah: spasi, tab, baris baru. Koma, titik koma, titik, dll. - karakter ini bukan pemisah untuk fungsi scanf().
  • Jika scanf menemukan karakter pemisah, input akan dihentikan. Jika ada lebih dari satu variabel untuk dibaca, maka scanf akan melanjutkan membaca variabel berikutnya.
  • Inkonsistensi sekecil apa pun dalam format data input menyebabkan hasil program yang tidak dapat diprediksi. Nah, jika program hanya berakhir dengan kesalahan. Tetapi seringkali program terus bekerja dan melakukan kesalahan.
  • scanf("%20s …", …); Jika aliran input melebihi 20 karakter, maka scanf akan membaca 20 karakter pertama dan membatalkan atau melanjutkan membaca variabel berikutnya, jika ada yang ditentukan. Dalam hal ini, panggilan berikutnya ke scanf akan melanjutkan membaca aliran input dari titik di mana pekerjaan panggilan sebelumnya ke scanf berhenti. Jika saat membaca 20 pertamakarakter, karakter pembatas ditemui, scanf akan membatalkan atau melanjutkan membaca variabel berikutnya, bahkan jika tidak membaca 20 karakter untuk variabel pertama. Dalam hal ini, semua karakter yang belum dibaca akan dilampirkan ke variabel berikutnya.
  • Jika kumpulan karakter yang dipindai dimulai dengan "^", maka scanf akan membaca data hingga menemukan karakter pembatas atau karakter dari kumpulan tersebut. Misalnya, "%[^A-E1-5]" akan membaca data dari aliran hingga salah satu karakter bahasa Inggris huruf besar dari A hingga E atau salah satu angka dari 1 hingga 5 ditemukan.
  • Fungsi scanf C, seperti yang dijelaskan, mengembalikan angka yang sama dengan jumlah penulisan variabel yang berhasil. Jika scanf menulis 3 variabel, maka hasil fungsi yang berhasil akan mengembalikan angka 3. Jika scanf tidak dapat menulis variabel apa pun, maka hasilnya akan menjadi 0. Dan terakhir, jika scanf tidak dapat memulai sama sekali karena suatu alasan, hasilnya akan menjadi EOF.
  • Jika fungsi scanf() berakhir salah. Misalnya, scanf("%d", &x) - angka diharapkan, tetapi karakter diterima sebagai input. Panggilan scanf() berikutnya akan dimulai pada titik di aliran input di mana panggilan fungsi sebelumnya berakhir. Untuk mengatasi masalah ini, perlu untuk menyingkirkan karakter masalah. Ini dapat dilakukan, misalnya, dengan memanggil scanf("%s"). Artinya, fungsi akan membaca string karakter dan membuangnya. Dengan cara yang rumit ini, Anda dapat terus memasukkan data yang diperlukan.
  • Dalam beberapa implementasi scanf(), "-" tidak diperbolehkan dalam rangkaian karakter yang dipindai.
  • Penentu "%c" membaca setiap karakter dari aliran. Artinya, ia juga membaca karakter pemisah. Untuk melewati karakter pembatas dan melanjutkan membaca karakter yang diinginkan, Anda dapat menggunakan "%1s".
  • Saat menggunakan specifier "c", diperbolehkan menggunakan lebar "%10c", tetapi kemudian array elemen bertipe char harus diteruskan sebagai variabel ke fungsi scanf.
  • “%[a-z]” berarti “semua huruf kecil dari alfabet bahasa Inggris”, dan “%[z-a]” berarti hanya 3 karakter: ‘z’, ‘a’, ‘-’. Dengan kata lain, karakter "-" berarti rentang hanya jika berada di antara dua karakter yang urutannya benar. Jika "-" berada di akhir ekspresi, di awal, atau dalam urutan karakter yang salah di kedua sisinya, maka itu hanya karakter tanda hubung, bukan rentang.
kode C++
kode C++

Kesimpulan

Ini mengakhiri deskripsi scanf C. Ini adalah fitur praktis yang bagus untuk bekerja dalam program kecil dan saat menggunakan metode pemrograman prosedural. Namun, kelemahan utama adalah jumlah kesalahan tak terduga yang dapat terjadi saat menggunakan scanf. Oleh karena itu, deskripsi scanf C saat pemrograman sebaiknya disimpan di depan mata Anda. Dalam proyek profesional besar, iostream digunakan, karena fakta bahwa mereka memiliki kemampuan tingkat yang lebih tinggi, mereka lebih mampu menangkap dan menangani kesalahan, dan juga bekerja dengan sejumlah besar informasi. Perlu juga dicatat bahwa deskripsi scanf C dalam bahasa Rusia tersedia di banyak sumber jaringan, serta contohnyadigunakan, karena usia fungsi. Karena itu, jika perlu, Anda selalu dapat menemukan jawabannya di forum tematik.

Direkomendasikan: