Ciri-ciri umumc. Fungsi Scanf C: deskripsi

Artikel ini membahas fungsi scanf() di pandangan umum tanpa mengacu pada standar tertentu, oleh karena itu data dari standar apa pun C99, C11, C++11, C++14 disertakan di sini. Ada kemungkinan bahwa dalam beberapa standar, fungsinya bekerja secara berbeda dari materi yang disajikan dalam artikel.

fungsi scanf C - deskripsi

scanf() adalah fungsi yang terletak di file header stdio.h(C) dan cstdio(C++), ini juga disebut input yang diformat ke program. scanf membaca karakter dari input standar (stdin) dan mengonversinya sesuai format, lalu menulisnya ke variabel yang ditentukan. Format berarti data yang diterima direduksi menjadi bentuk tertentu. Dengan demikian, fungsi scanf C dijelaskan:

scanf("%format", &variabel1[, &variabel2,[…]]),

di mana variabel diteruskan sebagai alamat. Alasan meneruskan variabel ke suatu fungsi dengan cara ini jelas: sebagai hasil operasinya, ia mengembalikan nilai yang menunjukkan adanya kesalahan, jadi satu-satunya cara untuk mengubah nilai variabel adalah dengan meneruskan alamat. Selain itu, berkat metode ini, fungsi tersebut dapat memproses data jenis apa pun.

Beberapa pemrogram memanggil fungsi seperti prosedur scanf() atau printf() karena analoginya dengan bahasa lain.

Scanf memungkinkan Anda memasukkan semua tipe bahasa dasar: char, int, float, string, dll. Dalam hal variabel bertipe string, tidak perlu menunjukkan tanda alamat - “&”, karena variabel bertipe string adalah array, dan namanya adalah alamat elemen pertama array di memori komputer.

Format input data atau string kontrol

Mari kita mulai dengan melihat contoh penggunaan fungsi scanf C dari deskripsi.

#termasuk int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //persyaratan untuk sistem linux )

Format input terdiri dari empat parameter berikut: tipe %[*][width][modifiers]. Dalam hal ini, tanda dan tipe “%” adalah parameter yang diperlukan. Artinya, format minimumnya terlihat seperti ini: “%s”, “%d” dan seterusnya.

Secara umum karakter-karakter pembentuk format string dibagi menjadi:

  • penentu format - segala sesuatu yang dimulai dengan simbol %;
  • karakter pemisah atau spasi - ini adalah spasi, tab (\t), baris baru (\n);
  • karakter selain spasi.

Fungsinya mungkin tidak aman.

Gunakan scanf_s() alih-alih scanf().

(pesan dari Studio visual)

Ketik, atau penentu format, atau karakter konversi, atau karakter kontrol

Deskripsi scanf C minimal harus berisi penentu format, yang ditunjukkan di akhir ekspresi yang diawali dengan tanda "%". Ini memberi tahu program jenis data yang diharapkan saat dimasukkan, biasanya dari keyboard. Daftar semua penentu format ada pada tabel di bawah.

Arti

Program menunggu karakter dimasukkan. Variabel yang akan ditulis harus bertipe karakter char.

Program mengharapkan bilangan desimal bilangan bulat untuk dimasukkan. Variabelnya harus bertipe int.

Program ini mengharapkan bilangan floating point dalam bentuk eksponensial. Variabelnya harus bertipe float.

Program mengharapkan nomor floating point dimasukkan. Variabelnya harus bertipe float.

7

Program mengharapkan nomor floating point dimasukkan. Variabelnya harus bertipe float.

Program mengharapkan bilangan oktal dimasukkan. Variabelnya harus bertipe int.

Program mengharapkan string dimasukkan. Sebuah string dianggap sebagai kumpulan karakter apa pun hingga karakter pembatas pertama yang ditemui. Variabelnya harus bertipe string.

Program mengharapkan angka heksadesimal dimasukkan. Variabelnya harus bertipe int.

Variabel mengharapkan input pointer. Variabel harus bertipe pointer.

Menulis nilai integer ke variabel sama dengan jumlah karakter yang dibaca sejauh ini oleh fungsi scanf.

Program membaca bilangan bulat yang tidak ditandatangani. Tipe variabel harus berupa bilangan bulat tak bertanda.

Program mengharapkan bilangan biner dimasukkan. Variabelnya harus bertipe int.

Satu set karakter yang dapat dipindai. Program menunggu masukan karakter dari kumpulan terbatas yang ditentukan antara scanf dan akan bekerja selama ada karakter dari kumpulan yang ditentukan pada aliran masukan.

Karakter dalam format string

Tanda bintang (*)

Tanda bintang (*) adalah tanda yang menunjukkan bahwa operasi penugasan harus dihentikan. Tanda bintang ditempatkan tepat setelah tanda “%”. Misalnya,

Scanf("%d%*c%d", &x, &y); //abaikan karakter di antara dua bilangan bulat. scanf("%s%*d%s",str,str2); //abaikan bilangan bulat di 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 maksimum karakter yang akan dibaca untuk operasi baca saat ini.

Ada beberapa poin penting yang perlu diingat:

  1. scanf akan berhenti berjalan jika menemukan karakter pembatas, meskipun belum menghitung 20 karakter.
  2. Jika input berisi lebih dari 20 karakter, hanya 20 karakter pertama yang akan ditulis ke variabel str.

Pengubah tipe (atau presisi)

Ini adalah tanda khusus yang mengubah jenis data yang diharapkan untuk masukan. Bendera ditentukan di sebelah kiri penentu tipe:

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

Gambar dengan modifier dapat disajikan lebih jelas dalam bentuk tabel. Deskripsi scanf C ini akan lebih jelas bagi programmer.

Karakter lainnya

Karakter apa pun yang ditemui dalam format akan dibuang. Perlu dicatat bahwa kehadiran spasi atau karakter pembatas (baris baru, spasi, tab) di string kontrol dapat menyebabkan perilaku fungsi yang berbeda. Dalam satu versi, scanf() akan membaca tanpa menyimpan sejumlah pembatas hingga menemukan karakter selain pembatas, dan di versi lain, spasi (hanya spasi) tidak menjadi masalah dan ekspresi "%d + %d" setara ke "%d+%d".

Contoh

Mari kita lihat sejumlah contoh untuk membantu Anda memikirkan dan memahami cara kerja fungsi tersebut dengan lebih akurat.

Scanf("%3s",str); //jika Anda memasukkan baris “1d2s3d1;3” di konsol, hanya “1d2” yang akan ditulis ke str scanf("%dminus%d", &x, &y); //karakter minus di antara dua angka akan dibuang scanf("%5", str); //karakter akan dimasukkan ke dalam str hingga berjumlah 5 dan karakter tersebut berupa angka 0 sampai 9. scanf("%lf", &d); //input yang diharapkan bertipe double scanf("%hd", &x); //mengharapkan sejumlah tipe short scanf("%hu", &y); //mengharapkan sejumlah tipe unsigned short scanf("lx", &z); //jumlah yang diharapkan dari tipe long int

Dari contoh di atas Anda dapat melihat bagaimana angka yang diharapkan berubah menggunakan berbagai karakter.

scanf C - deskripsi untuk pemula

Bagian ini akan berguna untuk pemula. Seringkali Anda tidak perlu memiliki terlalu banyak barang Deskripsi lengkap scanf C, berapa detail cara kerja fungsi tersebut.

  • Fungsinya agak ketinggalan jaman. Ada beberapa implementasi berbeda di perpustakaan versi yang berbeda. Misalnya, fungsi scanf SC yang ditingkatkan, penjelasannya 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 membatasi karakter: spasi, tab, baris baru. Koma, titik koma, titik, dll. - karakter ini bukan pembatas untuk fungsi scanf().
  • Jika scanf menemukan karakter pembatas, input akan dihentikan. Jika ada lebih dari satu variabel yang dibaca, scanf akan melanjutkan membaca variabel berikutnya.
  • Perbedaan sekecil apa pun dalam format data masukan menyebabkan hasil program yang tidak dapat diprediksi. Ada baiknya jika program berakhir dengan error saja. Namun seringkali program terus bekerja dan tidak berfungsi dengan benar.
  • scanf("%20s...", ...); Jika aliran input melebihi 20 karakter, scanf akan membaca 20 karakter pertama dan menghentikan atau melanjutkan membaca variabel berikutnya, jika ditentukan. Panggilan scanf berikutnya akan melanjutkan membaca aliran input dari mana panggilan scanf sebelumnya berhenti. Jika karakter pembatas ditemukan saat membaca 20 karakter pertama, scanf akan berhenti berjalan atau melanjutkan membaca variabel berikutnya, meskipun 20 karakter untuk variabel pertama tidak terbaca. Dalam hal ini, semua karakter yang tidak terhitung akan dilampirkan ke variabel berikutnya.
  • Jika kumpulan karakter yang akan dipindai diawali dengan tanda "^", 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 A hingga E atau salah satu angka 1 hingga 5 ditemukan.
  • Fungsi scanf C, seperti dijelaskan, mengembalikan angka yang sama dengan jumlah entri yang berhasil ke dalam variabel. Jika scanf menulis 3 variabel, maka hasil pengoperasian fungsi yang berhasil adalah kembalinya angka 3. Jika scanf tidak dapat menulis variabel apa pun, maka hasilnya adalah 0. Dan terakhir, jika scanf tidak dapat mulai bekerja di semua entah kenapa, hasilnya EOF .
  • Jika fungsi scanf() tidak menyelesaikan tugasnya dengan benar. Misalnya, scanf("%d", &x) - angka diharapkan, tetapi simbol diterima sebagai input. Pemanggilan scanf() berikutnya akan dimulai dari titik dalam aliran input di mana pemanggilan fungsi sebelumnya berakhir. Untuk mengatasi masalah ini, Anda perlu menyingkirkan karakter yang bermasalah. Hal ini dapat dilakukan, misalnya dengan memanggil scanf("%*s"). Artinya, fungsi tersebut akan membaca serangkaian karakter dan membuangnya. Dengan cara cerdas ini, Anda bisa terus memasukkan data yang diperlukan.
  • Beberapa implementasi scanf() tidak mengizinkan penggunaan "-" pada kumpulan karakter yang akan dipindai.
  • Penentu “%c” membaca setiap karakter dari aliran. Artinya, ia juga membaca karakter pembatas. Untuk melewati karakter pembatas dan melanjutkan membaca karakter yang diinginkan, Anda dapat menggunakan “%1s”.
  • Saat menggunakan penentu “c”, diperbolehkan menggunakan lebar “%10c”, tetapi kemudian dalam bentuk fungsi variabel scanf Anda harus meneruskan array elemen tipe char.
  • “%” berarti “semua huruf kecil dalam alfabet Inggris”, dan “%” berarti 3 karakter: 'z', 'a', '-'. Dengan kata lain, karakter "-" hanya berarti suatu rentang jika muncul di antara dua karakter yang urutannya benar. Jika "-" berada di akhir ekspresi, di awal, atau dalam urutan karakter yang salah di salah satu sisinya, maka itu hanya mewakili karakter tanda hubung, bukan rentang.

Kesimpulan

Ini menyimpulkan deskripsi scanf C. Ini adalah fungsi kenyamanan yang baik untuk digunakan program kecil dan ketika menggunakan metode pemrograman prosedural. Namun, kelemahan utamanya adalah banyaknya kesalahan tak terduga yang dapat terjadi saat menggunakan scanf. Oleh karena itu, yang terbaik adalah menyimpan deskripsi scanf C di depan mata Anda saat memprogram. Dalam proyek profesional besar, iostream digunakan karena memiliki kemampuan tingkat lebih tinggi, lebih mampu menangkap dan memproses kesalahan, dan juga bekerja dengan sejumlah besar informasi. Perlu juga dicatat bahwa deskripsi scanf C dalam bahasa Rusia tersedia di banyak sumber online, serta contoh penggunaannya, karena usia fungsinya. Oleh karena itu, jika perlu, Anda selalu dapat menemukan jawabannya di forum tematik.

Pustaka Standar C/C++ mencakup sejumlah fungsi untuk membaca dan menulis ke konsol (keyboard dan monitor). Fungsi-fungsi ini membaca dan menulis data sebagai aliran karakter sederhana.

Konsep aliran, yang digunakan dalam pemrograman, berkaitan erat dengan pemahaman sehari-hari tentang kata ini. Aliran masukan dapat dibandingkan dengan pipa yang dilalui air (informasi) memasuki kolam (memori komputer), dan aliran keluaran dapat dibandingkan dengan pipa yang dilalui air keluar dari kolam. Fitur penting Pipa ini adalah bahwa pada waktu tertentu data hanya dapat bergerak ke satu arah. Sekalipun pipa yang sama digunakan untuk saluran masuk dan saluran keluar, hal ini tidak dapat terjadi secara bersamaan: untuk mengubah arah aliran, aliran tersebut harus dihentikan, beberapa tindakan harus dilakukan, dan baru kemudian aliran dapat diarahkan ke arah yang berlawanan. . Keistimewaan lain dari sungai ini adalah hampir tidak pernah kering. Kadang-kadang mengering, tetapi jangka waktu ini tidak akan lama jika sistem berfungsi normal.

Fungsi keluaran standar printf()

Fungsi printf() adalah fungsi keluaran standar. Dengan menggunakan fungsi ini, Anda dapat menampilkan di layar monitor serangkaian karakter, angka, nilai variabel...

Fungsi printf() memiliki prototipe di stdio.h
int printf(char *string kontrol, ...);

Jika berhasil, printf() mengembalikan jumlah karakter yang dicetak.

Garis kontrol berisi dua jenis informasi: karakter yang langsung dicetak ke layar, dan penentu format yang menentukan cara argumen dicetak.

Fungsi printf() adalah fungsi keluaran yang diformat. Artinya pada parameter fungsi perlu ditentukan format data yang akan dikeluarkan. Format data ditentukan oleh penentu format. Penentu format dimulai dengan karakter % diikuti dengan kode format.

Penentu format:

%Dengan simbol
%D bilangan desimal bilangan bulat
%Saya bilangan desimal bilangan bulat
%e bilangan desimal dalam bentuk x.xx e+xx
%E bilangan desimal dalam bentuk x.xx E+xx
%F
%F angka desimal floating point xx.xxxx
%G %f atau %e, mana yang lebih pendek
%G %F atau %E, mana yang lebih pendek
%Hai bilangan oktal
%S string karakter
%u angka desimal yang tidak ditandatangani
%X angka heksadesimal
%X angka heksadesimal
%% simbol %
%P penunjuk
%N penunjuk

Selain itu, pengubah l dan h dapat diterapkan pada perintah format.

%ld cetak int panjang
%hu stempel pendek tanpa tanda tangan
%Jika stempel ganda panjang

Dalam penentu format, setelah simbol %, presisi (jumlah digit setelah koma desimal) dapat ditentukan. Presisinya diatur sebagai berikut: %.n<код формата>. Dimana n adalah banyaknya digit setelah koma, dan<код формата>- salah satu kode yang diberikan di atas.

Misalnya, jika kita mempunyai variabel x=10.3563 bertipe float dan ingin menampilkan nilainya akurat hingga 3 desimal, maka kita harus menulis:

printf("Variabel x = %.3f",x);

Hasil:
Variabel x = 10,356

Anda juga dapat menentukan lebar minimum bidang yang dialokasikan untuk pencetakan. Jika garis atau angka lebih besar dari lebar bidang yang ditentukan, maka garis atau angka tersebut dicetak penuh.

Misalnya, jika Anda menulis:

printf("%5d",20);

maka hasilnya adalah sebagai berikut:
20

Harap dicatat bahwa angka 20 tidak dicetak dari awal baris. Jika Anda ingin ruang-ruang yang tidak terpakai pada bidang tersebut diisi dengan angka nol, maka Anda perlu memberi simbol 0 di depan lebar bidang.

Misalnya:

printf("%05d",20);

Hasil:
00020

Selain penentu format data, baris kontrol mungkin berisi karakter kontrol:

\B BS, bawah
\F Halaman baru, halaman berganti
\N Baris baru, umpan baris
\R Kereta kembali
\T Tabulasi horizontal
\v Tab vertikal
\" Kutipan ganda
\" Apostrof
\\ Garis miring terbalik
\0 Karakter nol, byte nol
\A Sinyal
\N Konstanta oktal
\xN Konstanta heksadesimal
\? Tanda tanya

Paling sering Anda akan menggunakan karakter \n. Dengan karakter kontrol ini Anda dapat menuju ke baris baru. Lihatlah contoh program dan Anda akan memahami segalanya.

Contoh program.

/* Contoh 1 */
#termasuk

batal utama (batal)
{
ke dalam a,b,c; // Pengumuman variabel a,b,c
sebuah=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Hasil dari program ini:
a=5, b=6, c=9

/* Contoh 2 */
#termasuk

batal utama (batal)
{
mengambang x,y,z;

X=10,5;
kamu=130,67;
z=54;

Printf("Koordinat benda : x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Hasil dari program ini:
Koordinat objek: x:10.50, y:130.67, z:54.00

/* Contoh 3 */
#termasuk

batalkan utama()
{
ke dalam x;

X=5;
printf("x=%d",x*2);
}

Hasil dari program ini:
x=10

/* Contoh 4 */
#termasuk

batal utama (batal)
{
printf("\"Teks dalam tanda petik\"");
printf("\nKandungan oksigen : 100%%");
}

Hasil dari program ini:
"Teks dalam tanda kutip"
Kandungan oksigen: 100%

/* Contoh 5 */
#termasuk

batal utama (batal)
{
ke dalam;

SEBUAH=11; // 11 dalam desimal sama dengan b dalam heksadesimal
printf("a-des=%d, a-hex=%X",a,a);
}

Hasil dari program ini:
a-des=11, a-hex=b

/* Contoh 6 */
#termasuk

batal utama (batal)
{
karakter ch1,ch2,ch3;

Bab1="A";
ch2="B";
ch3="C";

Printf("%c%c%c",ch1,ch2,ch3);
}

Hasil dari program ini:
ABC

/* Contoh 7 */
#termasuk

batal utama (batal)
{
char *str="String saya.";

Printf("Ini %s",str);
}

Hasil dari program ini:
Ini adalah kalimatku.

/* Contoh 8 */
#termasuk

batal utama (batal)
{
printf("Halo!\n"); // Setelah dicetak akan ada transisi ke baris baru - \n
printf("Nama saya Paul."); // Ini akan dicetak pada baris baru
}

Hasil dari program ini:
Halo!
Nama saya Pavel.

Fungsi masukan standar scanf()

Fungsi scanf() adalah fungsi masukan yang diformat. Dengan bantuannya, Anda dapat memasukkan data dari perangkat input standar (keyboard). Data masukan dapat berupa bilangan bulat, angka floating point, karakter, string, dan pointer.

Fungsi scanf() memiliki prototipe berikut di stdio.h:
int scanf(char *string kontrol);

Fungsi ini mengembalikan jumlah variabel yang telah diberi nilai.

String kontrol berisi tiga jenis karakter: penentu format, spasi, dan karakter lainnya. Penentu format dimulai dengan karakter %.

Penentu format:

Saat memasukkan string menggunakan fungsi scanf() (penentu format %s), string dimasukkan sebelum spasi pertama!! itu. jika Anda memasukkan string "Halo dunia!" menggunakan fungsi scanf()


scanf("%s",str);

kemudian setelah memasukkan string yang dihasilkan, yang akan disimpan dalam array str, akan terdiri dari satu kata “Halo”. FUNGSI MEMASUKI STRING SEBELUM RUANG PERTAMA! Jika Anda ingin memasukkan string dengan spasi, gunakan fungsinya

char *mendapat(char *buf);

Dengan fungsi get() Anda dapat memasukkan string lengkap. Fungsi get() membaca karakter dari keyboard hingga karakter tersebut muncul garis baru(\N). Karakter baris baru sendiri muncul ketika Anda menekan enter. Fungsi ini mengembalikan pointer ke buf. buf - buffer (memori) untuk string input.

Meskipun get() bukan topik artikel ini, mari kita tulis sebuah contoh program yang memungkinkan Anda memasukkan seluruh baris dari keyboard dan menampilkannya di layar.

#termasuk

batal utama (batal)
{
penyangga arang; // array (buffer) untuk string masukan

Mendapat (penyangga); // masukkan satu baris dan tekan enter
printf("%s",buffer); // menampilkan string yang dimasukkan ke layar
}

Satu lagi catatan penting! Untuk memasukkan data menggunakan fungsi scanf(), ia perlu meneruskan alamat variabel sebagai parameter, bukan variabel itu sendiri. Untuk mendapatkan alamat suatu variabel, Anda harus mengawali nama variabel dengan tanda & (ampersand). Tanda & berarti mengambil alamat.

Apa yang dimaksud dengan alamat? Saya akan mencoba menjelaskannya. Dalam program ini kita memiliki variabel. Variabel menyimpan nilainya di memori komputer. Jadi ini adalah alamat yang kita peroleh dengan menggunakan & merupakan alamat di memori komputer tempat nilai variabel disimpan.

Mari kita lihat contoh program yang menunjukkan kepada kita cara menggunakan &

#termasuk

batal utama (batal)
{
ke dalam x;

Printf("Masukkan variabel x :");
scanf("%d",&x);
printf("Variabel x=%d",x);
}

Sekarang mari kita kembali ke garis kontrol fungsi scanf(). Lagi:

int scanf(char *string kendali);

Karakter spasi pada string kontrol memerintahkan satu atau lebih spasi untuk dilewati dalam aliran input. Selain spasi, karakter tab atau baris baru dapat dilihat. Karakter bukan nol menunjukkan bahwa karakter tersebut dibaca dan dibuang.

Pemisah antara dua angka yang Anda masukkan adalah spasi, tab, atau baris baru. Tanda * setelah % dan sebelum kode format (format specifier) ​​memerintahkan tipe data untuk dibaca, tetapi tidak ditetapkan ke nilai itu.

Misalnya:

scanf("%d%*c%d",&i,&j);

memasukkan 50+20 akan mengatur variabel i menjadi 50, variabel j menjadi 20, dan karakter + akan dibaca dan diabaikan.

Perintah format dapat menentukan lebar bidang terbesar yang akan dibaca.

Misalnya:

scanf("%5s",str);

menunjukkan kebutuhan untuk membaca 5 karakter pertama dari aliran input. Jika Anda memasukkan 1234567890ABC, array str hanya akan berisi 12345, karakter sisanya akan diabaikan. Pemisah: spasi, tab, dan baris baru - saat memasukkan simbol, simbol tersebut diperlakukan seperti semua karakter lainnya.

Jika ada karakter lain yang muncul di string kontrol, karakter tersebut dimaksudkan untuk mengidentifikasi dan melewatkan karakter terkait. Aliran karakter operator 10plus20

scanf("%dplus%d",&x,&y);

akan menetapkan nilai 10 ke variabel x, nilai 20 ke variabel y, dan akan melewatkan karakter plus karena muncul di string kontrol.

Satu dari fitur-fitur canggih Fungsi scanf() memungkinkan Anda menentukan kumpulan pencarian (scanset). Kumpulan pencarian mendefinisikan kumpulan karakter yang akan dibandingkan dengan karakter yang dibaca oleh fungsi scanf(). Fungsi scanf() membaca karakter selama karakter tersebut muncul di kumpulan pencarian. Segera setelah karakter yang dimasukkan tidak ditemukan dalam kumpulan pencarian, fungsi scanf() berpindah ke penentu format berikutnya. Kumpulan pencarian ditentukan oleh daftar karakter yang diapit tanda kurung siku. Tanda % diletakkan sebelum tanda kurung buka. Mari kita lihat ini dengan sebuah contoh.

#termasuk

batal utama (batal)
{
karakter str1, str2;
scanf("%%s",str1,str2);
printf("\n%s\n%s",str1,str2);
}
Mari masukkan satu set karakter:
12345abcdefg456

Program akan ditampilkan di layar:
12345
abcdefg456

Saat menentukan kumpulan pencarian, Anda juga dapat menggunakan karakter tanda hubung untuk menentukan spasi, serta lebar maksimum kolom masukan.

scanf("%10",str1);

Anda juga dapat menentukan karakter yang tidak termasuk dalam kumpulan pencarian. Karakter pertama diawali dengan ^. Banyak karakter yang membedakan huruf kecil dan huruf besar.

Izinkan saya mengingatkan Anda bahwa saat menggunakan fungsi scanf(), Anda harus meneruskan alamat variabel ke fungsi tersebut sebagai parameter. Kode di atas ditulis:

karakter str; // larik 80 karakter
scanf("%s",str);

Perhatikan bahwa str tidak diawali dengan &. Hal ini dilakukan karena str adalah array dan nama array - str adalah penunjuk ke elemen pertama array. Oleh karena itu, tanda & tidak boleh digunakan. Kami sudah meneruskan alamat ke fungsi scanf(). Sederhananya, str adalah alamat di memori komputer tempat nilai elemen pertama array akan disimpan.

Contoh program.

Contoh 1.
Program ini menampilkan permintaan "Berapa umurmu?:" dan menunggu input data. Jika misalnya Anda memasukkan angka 20, program akan menampilkan baris “Anda berumur 20 tahun.”. Saat memanggil fungsi scanf(), kita meletakkan tanda & di depan variabel umur, karena fungsi scanf() memerlukan alamat variabel. Fungsi scanf() akan menulis nilai yang dimasukkan ke alamat yang ditentukan. Dalam kasus kami, nilai yang dimasukkan 20 akan ditulis ke alamat variabel umur.

/* Contoh 1 */

#termasuk

batal utama (batal)
{
ke dalam usia;

Printf("\nBerapa umur anda?:");
scanf("%d",&umur);
printf("Umur anda %d tahun.",umur);
}

Contoh 2.
Program kalkulator. Kalkulator ini hanya dapat menjumlahkan angka. Ketika Anda memasukkan 100+34, program akan menghasilkan hasil: 100+34=134.

/* Contoh 2 */

#termasuk

batal utama (batal)
{
ke dalam x, y;

Printf("\nKalkulator:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d",x,y,x+y);
}

Contoh 3.
Contoh ini menunjukkan cara mengatur lebar bidang bacaan. Dalam contoh kita, lebar bidang adalah lima karakter. Jika Anda memasukkan string dengan jumlah karakter yang banyak, maka semua karakter setelah tanggal 5 akan dibuang. Perhatikan pemanggilan fungsi scanf(). Tanda & tidak mendahului nama nama array karena nama nama array adalah alamat elemen pertama array.

/* Contoh 3 */

#termasuk

batal utama (batal)
{
nama karakter;

Printf("\nMasukkan nama pengguna Anda (maksimal 5 karakter):");
scanf("%5s", nama);
printf("\nAnda memasukkan %s", nama);
}

Contoh 4.
Contoh terakhir dalam artikel ini menunjukkan bagaimana kumpulan pencarian dapat digunakan. Setelah memulai program, masukkan angka dari 2 hingga 5.

/* Contoh 4 */

#termasuk

batal utama (batal)
{
arang bal;

Printf("Nilai Anda adalah 2,3,4,5:");
scanf("%", &bal);
printf("\nNilai %c",bal);
}

bahasa pemrograman C++

Pembaruan terakhir: 28/08/2017

Bahasa pemrograman C++ adalah bahasa pemrograman tujuan umum yang dikompilasi tingkat tinggi dengan pengetikan statis, yang cocok untuk membuat berbagai macam aplikasi. Saat ini, C++ adalah salah satu bahasa yang paling populer dan tersebar luas.

Ini berakar pada bahasa C, yang dikembangkan pada tahun 1969-1973 di Bell Labs oleh programmer Dennis Ritchie. Pada awal 1980-an, programmer Denmark Bjarne Stroustrup, yang saat itu bekerja di Bell Labs, mengembangkan C++ sebagai perpanjangan dari bahasa C. Faktanya, pada awalnya, C++ hanya melengkapi bahasa C dengan beberapa kemampuan pemrograman berorientasi objek. Dan itulah mengapa Stroustrup sendiri awalnya menyebutnya “C dengan kelas.”

Kemudian bahasa baru mulai mendapatkan popularitas. Fitur-fitur baru ditambahkan ke dalamnya yang menjadikannya bukan hanya tambahan untuk C, tetapi bahasa pemrograman yang benar-benar baru. Akibatnya, “C dengan kelas” diubah namanya menjadi C++. Dan sejak saat itu, kedua bahasa tersebut mulai berkembang secara mandiri.

C++ adalah bahasa yang kuat, mewarisi kemampuan memori yang kaya dari C. Oleh karena itu, C++ sering kali diterapkan dalam pemrograman sistem, khususnya saat membuat sistem operasi, driver, berbagai utilitas, antivirus, dll. Omong-omong, OS Windows sebagian besar ditulis dalam C++. Tapi hanya aplikasi pemrograman sistem dari bahasa ini tidak terbatas. C++ dapat digunakan dalam program di tingkat mana pun yang mengutamakan kecepatan dan kinerja. Ini sering digunakan untuk membuat aplikasi grafis, bermacam-macam program aplikasi. Ini juga sering digunakan untuk membuat game dengan visualisasi yang kaya dan kaya. Selain itu, baru-baru ini arah seluler mendapatkan momentumnya, di mana C++ juga telah menemukan penerapannya. Bahkan dalam pengembangan web, Anda juga dapat menggunakan C++ untuk membuat aplikasi web atau beberapa layanan pendukung yang melayani aplikasi web. Secara umum, C++ adalah bahasa yang banyak digunakan di mana Anda dapat membuat hampir semua jenis program.

C++ adalah bahasa yang dikompilasi, artinya kompiler menerjemahkan sumber dalam C++ menjadi file yang dapat dieksekusi yang berisi sekumpulan instruksi mesin. Namun platform yang berbeda memiliki karakteristiknya masing-masing, sehingga program yang dikompilasi tidak dapat begitu saja ditransfer dari satu platform ke platform lainnya dan dijalankan di sana. Namun, pada tingkat kode sumber, program C++ sebagian besar bersifat portabel kecuali beberapa fungsi khusus OS digunakan. Dan ketersediaan kompiler, pustaka, dan alat pengembangan untuk hampir semua platform umum memungkinkan Anda mengkompilasi kode sumber C++ yang sama ke dalam aplikasi untuk platform ini.

Berbeda dengan C, bahasa C++ memungkinkan Anda menulis aplikasi dengan gaya berorientasi objek, merepresentasikan program sebagai kumpulan kelas dan objek yang berinteraksi satu sama lain. Yang menyederhanakan pembuatan aplikasi besar.

Tahapan utama perkembangan

Pada 1979-80, Bjarne Stroustrup mengembangkan ekstensi ke bahasa C - "C with Classes". Pada tahun 1983 bahasa ini berganti nama menjadi C++.

Pada tahun 1985, versi komersial pertama dari bahasa C++ dirilis, serta edisi pertama buku "Bahasa Pemrograman C++", yang mewakili deskripsi pertama bahasa ini tanpa adanya standar resmi.

Dirilis pada tahun 1989 versi baru Bahasa C++ 2.0, yang menyertakan sejumlah fitur baru. Setelah itu, bahasa tersebut berkembang relatif lambat hingga tahun 2011. Namun pada saat yang sama, pada tahun 1998, upaya pertama untuk membakukan bahasa dilakukan oleh organisasi ISO (Organisasi Internasional untuk Standardisasi). Standar pertama disebut ISO/IEC 14882:1998, atau disingkat C++98. Selanjutnya, pada tahun 2003, versi baru dari standar C++03 diterbitkan.

Pada tahun 2011, standar baru, C++11, diterbitkan, yang berisi banyak tambahan dan memperkaya bahasa C++. jumlah yang besar fungsionalitas baru. Setelah itu, tambahan kecil pada standar ini, yang juga dikenal sebagai C++14, dirilis pada tahun 2014. Dan rilis penting lainnya dari bahasa ini dijadwalkan pada tahun 2017.

Kompiler dan lingkungan pengembangan

Untuk mengembangkan program dalam C++, Anda memerlukan kompiler - kompiler yang menerjemahkan kode sumber dalam C++ menjadi file yang dapat dieksekusi, yang kemudian dapat Anda jalankan. Namun saat ini ada banyak kompiler yang berbeda. Mereka mungkin berbeda dalam berbagai aspek, khususnya dalam penerapan standar. Daftar dasar kompiler untuk C++ dapat ditemukan di Wikipedia. Disarankan bagi pengembangan untuk memilih kompiler yang mengembangkan dan menerapkan semua standar terbaru. Oleh karena itu, sepanjang tutorial ini kita terutama akan menggunakan kompiler g++ yang tersedia secara gratis dan dikembangkan oleh Proyek GNU.

Anda juga dapat menggunakan IDE seperti Visual Studio, Netbeans, Eclipse, Qt, dll untuk membuat program.

Mempelajari dasar-dasar dan seluk-beluk bahasa pemrograman C++. Buku teks dengan tugas-tugas praktis dan tes. Apakah Anda ingin belajar memprogram? Maka Anda berada di tempat yang tepat - di sini pendidikan gratis pemrograman. Baik Anda berpengalaman atau tidak, pelajaran pemrograman ini akan membantu Anda mulai membuat, mengompilasi, dan men-debug program C++ di berbagai lingkungan pengembangan: Visual Studio, Code::Blocks, Xcode, atau Eclipse.

Banyak contoh dan penjelasan detail. Sempurna untuk pemula (boneka) dan yang lebih mahir. Semuanya dijelaskan dari awal hingga detailnya. Pelajaran ini (200+) akan memberi Anda dasar/fondasi yang baik dalam memahami pemrograman tidak hanya dalam C++, tetapi juga dalam bahasa pemrograman lainnya. Dan itu benar-benar gratis!

Juga dipertimbangkan pembuatan langkah demi langkah permainan di C++, perpustakaan grafis SFML dan lebih dari 50 tugas untuk menguji keterampilan dan pengetahuan Anda dalam C++. Bonus tambahannya adalah.

Untuk memposting ulang +20 ke karma dan terima kasih saya!

Bab No.0. Perkenalan. Awal pekerjaan

Bab No.1. Dasar-dasar C++

Bab No.2. Variabel dan tipe data dasar di C++

Bab No.3. Operator di C++

Bab No.4. Cakupan dan jenis variabel lainnya di C++

Bab No.5. Urutan eksekusi kode dalam suatu program. Loop dan cabang di C++

Tutorial ini ditujukan untuk semua orang, baik Anda baru mengenal pemrograman atau memiliki pengalaman pemrograman luas dalam bahasa lain! Materi ini diperuntukkan bagi mereka yang ingin mempelajari bahasa C/C++ dari dasar hingga struktur yang paling kompleks.

C++ adalah bahasa pemrograman, pengetahuan tentang bahasa pemrograman ini akan memungkinkan Anda untuk mengontrol komputer Anda level tertinggi. Idealnya, Anda dapat membuat komputer melakukan apa pun yang Anda inginkan. Situs kami akan membantu Anda menguasai bahasa pemrograman C++.

Instalasi / IDE

Hal pertama yang harus Anda lakukan sebelum mulai belajar C++ adalah memastikan bahwa Anda memiliki IDE - lingkungan pengembangan terintegrasi (program yang akan Anda programkan). Jika Anda tidak memiliki IDE, ini dia. Setelah Anda memutuskan pilihan IDE, instal dan berlatih membuat proyek sederhana.

Pengantar C++

Bahasa C++ adalah sekumpulan perintah yang memberi tahu komputer apa yang harus dilakukan. Kumpulan perintah ini biasanya disebut kode sumber atau hanya kode. Perintahnya bisa berupa "fungsi" atau " kata kunci" Kata kunci (kata-kata khusus C/C++) adalah elemen dasar bahasa ini. Fungsi adalah blok penyusun yang kompleks karena ditulis dalam bentuk fungsi yang lebih sederhana - Anda akan melihatnya di program pertama kami, yang ditunjukkan di bawah. Struktur fungsinya menyerupai isi buku. Isinya dapat menunjukkan bab-bab buku, setiap bab dalam buku dapat mempunyai isi tersendiri yang terdiri dari paragraf-paragraf, setiap paragraf dapat mempunyai sub-subparagrafnya sendiri. Meskipun C++ menyediakan banyak hal fungsi umum dan kata-kata khusus yang dapat Anda gunakan, masih ada kebutuhan untuk menulis fungsi Anda sendiri.

Bagian mana dari program yang memulainya? Setiap program pada C++ mempunyai satu fungsi yang disebut dengan fungsi utama atau main, eksekusi program diawali dengan fungsi tersebut. Dari fungsi utama, Anda juga dapat memanggil fungsi lainnya, baik fungsi yang kami tulis atau, seperti yang disebutkan sebelumnya, disediakan oleh kompiler.

Lalu bagaimana cara mengakses Fitur Standar ini? Untuk mengakses fungsi standar, yang disertakan dengan kompiler, Anda perlu menyertakan file header menggunakan direktif praprosesor - #include . Mengapa ini efektif? Mari kita lihat sebuah contoh program kerja:

#termasuk << "Моя первая программа на С++\n"; cin.get(); }

Mari kita pertimbangkan secara rinci elemen-elemen program ini. #include adalah arahan "praprosesor" yang memberitahu kompiler untuk memasukkan kode dari file header iostream ke dalam program kita sebelum membuat file yang dapat dieksekusi. Dengan menghubungkan file header ke suatu program, Anda mendapatkan akses ke berbagai fungsi berbeda yang dapat Anda gunakan dalam program Anda. Misalnya, operator cout memerlukan iostream . Baris menggunakan namespace std; memberitahu kompiler untuk menggunakan sekelompok fungsi yang merupakan bagian dari perpustakaan standar std. Baris ini juga mengizinkan program untuk menggunakan operator seperti cout. Titik koma adalah bagian dari sintaks C++. Ini memberitahu kompiler bahwa ini adalah akhir dari perintah. Anda akan segera melihat bahwa titik koma digunakan untuk mengakhiri sebagian besar perintah di C++.

Baris penting berikutnya dari program ini adalah int main(). Baris ini memberi tahu kompiler bahwa ada fungsi bernama main dan fungsi tersebut mengembalikan bilangan bulat. Tanda kurung kurawal ( dan ) menandai awal (dan akhir) suatu fungsi. Kurung kurawal juga digunakan di blok kode lain, tetapi kurung kurawal selalu menunjukkan satu hal - masing-masing awal dan akhir blok.

Di C++, objek cout digunakan untuk menampilkan teks (diucapkan "C out"). Dia menggunakan simbol-simbol<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Perintah selanjutnya adalah cin.get() . Ini adalah pemanggilan fungsi lain yang membaca data dari aliran data input dan menunggu tombol ENTER ditekan. Perintah ini menjaga jendela konsol agar tidak tertutup hingga tombol ENTER ditekan. Ini memberi Anda waktu untuk melihat keluaran program.

Setelah mencapai akhir fungsi utama (kurung kurawal penutup), program kami akan mengembalikan nilai 0 ke sistem operasi. Nilai kembalian ini penting karena dengan menganalisisnya, OS dapat menilai apakah program kita berhasil diselesaikan atau tidak. Nilai pengembalian 0 berarti sukses dan dikembalikan secara otomatis (tetapi hanya untuk tipe data int; fungsi lain mengharuskan Anda mengembalikan nilai secara manual), tetapi jika kita ingin mengembalikan sesuatu yang lain, seperti 1, kita harus melakukannya secara manual.

#termasuk menggunakan namespace std; int utama() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Untuk mengkonsolidasikan materi, ketikkan kode program di IDE Anda dan jalankan. Setelah program berjalan dan Anda melihat hasilnya, bereksperimenlah sedikit dengan pernyataan cout. Ini akan membantu Anda terbiasa dengan bahasa tersebut.

Pastikan untuk mengomentari program Anda!

Tambahkan komentar ke kode Anda agar lebih jelas tidak hanya bagi Anda sendiri tetapi juga bagi orang lain. Kompiler mengabaikan komentar saat mengeksekusi kode, sehingga Anda dapat menggunakan sejumlah komentar untuk mendeskripsikan kode sebenarnya. Untuk membuat komentar, gunakan atau // , yang memberi tahu kompiler bahwa sisa barisnya adalah komentar, atau /* lalu */ . Saat Anda belajar memprogram, ada gunanya memberi komentar pada bagian kode untuk melihat bagaimana keluaran program berubah. Anda dapat membaca secara detail tentang teknik berkomentar.

Apa yang harus dilakukan dengan semua jenis variabel ini?

Terkadang membingungkan untuk memiliki beberapa tipe variabel ketika beberapa tipe variabel tampak mubazir. Sangat penting untuk menggunakan tipe variabel yang benar, karena beberapa variabel memerlukan lebih banyak memori dibandingkan yang lain. Selain itu, karena cara mereka disimpan dalam memori, angka floating point, tipe data float dan double adalah "tidak tepat" dan tidak boleh digunakan ketika nilai integer yang tepat perlu disimpan.

Mendeklarasikan Variabel di C++

Untuk mendeklarasikan variabel, gunakan tipe sintaksis<имя>; . Berikut beberapa contoh deklarasi variabel:

Nomor masuk; karakter karakter; float jumlah_float;

Boleh mendeklarasikan beberapa variabel bertipe sama dalam satu baris, untuk itu masing-masing variabel harus dipisahkan dengan koma.

Ke dalam x, y, z, d;

Jika Anda perhatikan lebih dekat, Anda mungkin pernah melihat bahwa deklarasi variabel selalu diikuti oleh titik koma. Anda dapat mempelajari lebih lanjut tentang konvensi “penamaan variabel”.

Kesalahan umum saat mendeklarasikan variabel di C++

Jika Anda mencoba menggunakan variabel yang tidak dideklarasikan, program Anda tidak akan dapat dikompilasi dan Anda akan menerima pesan kesalahan. Di C++, semua kata kunci bahasa, semua fungsi, dan semua variabel peka huruf besar-kecil.

Menggunakan Variabel

Jadi sekarang Anda sudah tahu cara mendeklarasikan variabel. Berikut adalah contoh program yang mendemonstrasikan penggunaan variabel:

#termasuk menggunakan namespace std; int main() ( int angka; cout<< "Введите число: "; cin >> nomor; cin.abaikan(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Mari kita lihat program ini dan periksa kodenya, baris demi baris. Kata kunci int menunjukkan bahwa bilangan tersebut adalah bilangan bulat. Fungsi cin >> membaca nilai menjadi angka, pengguna harus menekan enter setelah angka yang dimasukkan. cin.ignore() adalah fungsi yang membaca karakter dan mengabaikannya. Kami telah mengatur masukan kami ke dalam program; setelah memasukkan angka, kami menekan tombol ENTER, simbol yang juga dikirimkan ke aliran masukan. Kami tidak membutuhkannya, jadi kami membuangnya. Perlu diingat bahwa variabel dideklarasikan sebagai tipe integer, jika pengguna mencoba memasukkan angka desimal, maka akan terpotong (yaitu, bagian desimal dari angka tersebut akan diabaikan). Coba masukkan angka desimal atau rangkaian karakter, saat menjalankan program contoh, jawabannya akan tergantung pada nilai yang dimasukkan.

Perhatikan bahwa saat mencetak dari suatu variabel, tanda kutip tidak digunakan. Tidak adanya tanda kutip memberitahu kompiler bahwa ada sebuah variabel, dan oleh karena itu program harus memeriksa nilai variabel tersebut untuk mengganti nama variabel dengan nilainya pada saat eksekusi. Beberapa pernyataan shift pada baris yang sama dapat diterima dan keluarannya akan dilakukan dalam urutan yang sama. Anda harus memisahkan literal string (string yang diapit tanda kutip) dan variabel, dengan memberikan masing-masing operator shiftnya sendiri<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Mengubah dan membandingkan nilai

Tentu saja, apa pun jenis data yang Anda gunakan, variabel tidak akan menarik tanpa kemampuan untuk mengubah nilainya. Berikut ini adalah beberapa operator yang digunakan bersama dengan variabel:

  • * perkalian,
  • - pengurangan,
  • + tambahan,
  • / divisi,
  • = tugas,
  • == kesetaraan,
  • >lebih lanjut
  • < меньше.
  • != tidak setara
  • >= lebih besar atau sama dengan
  • <= меньше или равно

Operator yang menjalankan fungsi matematika harus digunakan di sebelah kanan tanda penugasan untuk menetapkan hasil ke variabel di sebelah kiri.

Berikut beberapa contohnya:

SEBUAH = 4*6; // gunakan komentar baris dan titik koma, a sama dengan 24 a = a + 5; // sama dengan jumlah nilai asli dan lima a == 5 // tidak menetapkan lima, periksa apakah sama dengan 5 atau tidak

Anda akan sering menggunakan == dalam konstruksi seperti pernyataan kondisional dan loop.

A< 5 // Проверка, a менее пяти? a >5 // Periksa, apakah lebih dari lima? a == 5 // Memeriksa, apakah a sama dengan lima? a != 5 // Periksa, apakah tidak sama dengan lima? a >= 5 // Periksa apakah a lebih besar atau sama dengan lima? A<= 5 // Проверка, a меньше или равно пяти?

Contoh-contoh ini tidak menunjukkan penggunaan tanda perbandingan dengan jelas, namun saat kita mulai mempelajari operator seleksi, Anda akan memahami mengapa hal ini perlu.



Memuat...
Atas