Perkenalan

Perkenalan

Anda telah terpapar sebagian kecil dari apa kontrol aliran di bagian kami sebelumnya, yaitu bagian tentang operator relasional. Saat Anda mulai menulis program yang lebih kompleks, Anda akan merasa perlu mengendalikan memesan di mana program Anda mengeksekusi berbagai bagian.
Kontrol aliran hadir di sebagian besar bahasa pemrograman dalam satu atau lain bentuk, dan apa yang akan Anda baca di sini sangat penting untuk menulis program C.

jika/lain/lain jika

Bagian kontrol aliran ini mungkin yang paling intuitif dan lebih sederhana, meskipun Anda dapat dengan mudah jatuh ke sisi gelap dan mulai menulis kode yang tidak dapat dipahami dengan IFS. Idenya sederhana: jika (condition_is_true) do_something; lain do_something_else; . Jadi ini semua tentang logika, logika biner yaitu, di mana ekspresi dapat memiliki dua nilai: benar atau salah. Jika Anda menggunakan C atau Java, Anda digunakan dengan datatype bool. Variabel bool hanya bisa benar atau hanya salah pada saat tertentu. Tapi C, meskipun tidak memiliki tipe data bool, memudahkan untuk menangani logika biner, seperti yang akan Anda lihat.

Katakanlah Anda ingin memberi tahu pengguna program Anda jika dia sudah tua atau tidak, tergantung pada usianya. Tidak cukup berguna dan mungkin menyinggung, tetapi demi mengilustrasikan poin kami, itu akan dilakukan. Jadi ide utamanya adalah: jika usia yang dimasukkan berada di atas ambang batas, maka kami memberi tahu pengguna bahwa dia sudah tua. Jika tidak, kami memberitahunya bahwa dia masih muda dan mekar. Kode untuk program seperti itu akan terlihat seperti ini:

#include #define Limit 50 int main () int usia; printf ("Halo, silakan masukkan usia Anda!\ n "); scanf ("%d ", & usia);  jika(usia < LIMIT)  printf("Your age is %d.\n", age); printf("Quite young, I say.\n");  kalau tidak jika(usia == batas) printf ("Anda mengatakan usia Anda adalah %d.\ n ", usia); printf (" hampir sampai.\N");  kalau tidak printf ("jadi usia Anda adalah %d, ya?\ n ", usia); printf (" Geezer.\N");  kembali 0; 

Program ini jelas tidak ada penggunaan praktis, tetapi ada elemen di dalamnya yang akan membantu kita menyampaikan poin kita dan menggambarkan beberapa elemen baru. Misalnya Anda akan melihat kami mendefinisikan a konstan Batas bernama (disarankan untuk memanfaatkan konstanta Anda) dengan nilai 50, yang merupakan ambang batas yang kita bicarakan di atas. Selanjutnya Anda akan melihat bahwa C tidak menggunakan 'lalu' setelah ekspresi IF seperti shell bourne, misalnya. Akhirnya, kami menulis program ini seperti ini karena kami dapat menggambarkan konsep penting lainnya: blok. Blok adalah serangkaian instruksi yang dimiliki bersama, disatukan oleh kawat gigi. Harap diingat bahwa jika Anda menggunakan orang lain jika Anda dapat menghilangkan final lainnya, tergantung pada situasinya.

Jadi, blok pertama kami mengatakan, “Jika usia lebih kecil dari 50, cetak 'usia Anda adalah $ usia' Dan mencetak 'sangat muda, kataku'. Ketika Anda mulai membaca kode orang lain, Anda akan melihat blok banyak digunakan di C, dan kami sarankan Anda menggunakannya kapan pun Anda membutuhkannya dan kadang -kadang bahkan ketika Anda tidak, untuk membuat kode Anda lebih mudah diakses oleh manusia biasa. Apa yang dimaksud dengan “bahkan saat tidak”? Nah, C memungkinkan Anda untuk bersarang IFS dan hal -hal mungkin ke selatan dengan sangat mudah dan membuat bug yang akan sulit dilacak, atau kode Anda dapat menjadi berantakan untuk dibaca oleh orang lain dan bahkan Anda, jadi jika Anda berencana untuk benar -benar menggunakan IFS bersarang dan tidak bisa hidup tanpanya, kami sarankan Anda menyalahgunakan penggunaan kawat gigi untuk kejelasan. Ada banyak situasi di mana logis dan operator dapat menyelamatkan Anda dan membuat kode Anda menjadi lebih mudah dibaca. Pertimbangkan contoh berikut:

Nomor int = 3; jika ((nomor> 2) && (nomor < 4))  printf ("number is three"); /* Ini bisa ditulis seperti ini:*/ Nomor int = 3; jika (nomor> 2)  jika (nomor < 4)  printf ("number is three");  

Sekali lagi, ini adalah contoh sederhana, tapi saya pikir Anda mengerti maksudnya. Gunakan metode apa pun yang diperlukan dan ingat bahwa '&&' tidak selalu merupakan pengganti IFS bersarang, tetapi jika Anda perlu terlalu rumit jika struktur, Anda mungkin perlu memikirkan kembali logika program Anda.

sementara dan untuk

Dengan bagian artikel kami ini, kami memperkenalkan konsep penting lain tentang pemrograman C: loop. Loop memungkinkan Anda untuk mengulangi instruksi atau blok tertentu tergantung pada suatu kondisi, yaitu, menjalankan sesuatu sampai beberapa kondisi mengubah nilai kebenarannya dari true ke false. Seperti yang Anda lihat, konsep ini terkait dengan instruksi bersyarat dan dapat digunakan bersama jika perlu.

ketika

Konsep teoretis while adalah 'while (ekspresi_is_true) execute_something;' . Dengan setiap iterasi, ekspresi dalam evaluasi kembali dan jika itu masih benar, instruksi dieksekusi lagi, sampai ekspresi yang kami uji terhadap menjadi salah. Dari sini kita dapat menyimpulkan bahwa jika kita ingin menulis loop tak terbatas menggunakan sementara, kita dapat menulis

ketika(1) do_stuff (); do_more_stuff (); 

Seperti yang kami katakan, C tidak memiliki kata kunci bool, tetapi Anda dapat melakukan sesuatu untuk mengatasi ini: Anda dapat mengkompilasi program Anda untuk mematuhi edisi C99 dari standar (-std = C99 sebagai bendera GCC), yang akan memungkinkan Anda mengakses _bool DataType, Anda dapat menggunakan stdbool.h yang mendefinisikan 1 sebagai benar dan 0 sebagai false atau Anda dapat mendefinisikan benar dan salah dengan instruksi preprocessor. Metode apa yang menurut Anda akan bekerja lebih baik dan mengapa? Bagaimana Anda menulis ulang cuplikan kode di atas mengingat apa yang dikatakan di atas?

Ngomong -ngomong, mari kita lanjutkan dengan contoh yang lengkap dan berfungsi. Katakanlah kami ingin mengeluarkan beberapa pesan di layar 5 kali. Kita akan berbicara tentang contoh yang sama nanti menggunakan untuk, tetapi untuk sekarang mari kita lihat bagaimana melakukannya dengan sementara.

#include int main () int i; i = 5; ketika(Saya != 0) printf ("Halo!\ n "); i--; kembali 0;  

Jadi saat mengeksekusi instruksi di antara kawat gigi sampai 'i != 0 'evaluasi sebagai false, yaitu saat saya sama dengan nol, maka ia berhenti. Agar loop ini berfungsi, kita perlu mengurangi I di setiap umpan, sampai mencapai nol.

Latihan

Sekarang, mengingat desain kontrol aliran berikut di sebelah kanan Anda, ubah kode di atas untuk menyesuaikan. Apakah Anda menemukan desain ini bermanfaat?

[TIP]: Baca sampai akhir artikel, Anda mungkin menemukan beberapa petunjuk yang berguna di sana.

untuk

Loop yang ditulis dengan untuk lebih kompak dan terorganisir, tetapi ia melakukan hal yang sama dengan loop sementara: mengevaluasi ekspresi dan melaksanakan sesuatu jika ekspresi itu benar. Ini berarti bahwa ada situasi di mana instruksi mungkin tidak mengeksekusi sama sekali, jika kondisinya salah dari awal. Anda akan melihat dalam kemauan mengapa ini penting. Menggunakan untuk vs sementara adalah masalah situasi, kebiasaan dan preferensi pribadi, jadi tidak ada yang bisa dilakukan dan yang lain tidak bisa.

A untuk loop memiliki tiga bagian: inisialisasi, loop, kenaikan/penurunan. Penting untuk mengetahui bahwa setiap bagian dari ketiganya dapat dihilangkan, tetapi titik koma, seperti yang akan Anda lihat, harus tetap ada. Jadi, loop tak terbatas dengan akan terlihat seperti ini:

untuk(;;)  lakukan sesuatu(); do_something_else (); 

Sekarang, asalkan Anda sudah menyatakan sebagai bilangan bulat, tetapi tidak ditentukan, bagaimana Anda menulis kode yang menghasilkan “halo!“Lima kali menggunakan loop untuk? Sangat mudah saat Anda melihatnya dengan cermat, jadi cobalah untuk menghindari Google atau sumber inspirasi lainnya. Perasaan yang Anda miliki saat Anda akan menyelesaikan ini untuk diri sendiri hampir tidak ada.

sakelar/case

Jika Anda ingin menggunakan program interaktif dan Anda menyadari bahwa pada satu titik Anda harus berurusan dengan banyak opsi, dipilih dari daftar konstanta, maka beralih adalah yang Anda butuhkan. Situasi ini sering ditemui saat menulis aplikasi interaktif, di mana Anda akan menggunakan dialog seperti ini: “Jika Anda ingin melakukan itu, tekan itu; Jika Anda membutuhkan ini, tekan ini ”dan seterusnya. Misalnya, kami akan menunjukkan kepada Anda sebuah program yang menunjukkan kepada Anda nilai integer yang Anda perkenalkan dalam hex atau octal, tergantung pada pilihan Anda.

#include int main () char opsi; nomor int; printf ("Harap masukkan nomor yang ingin Anda konversi.\N"); /*Harap jangan menggunakan gets () karena itu  * tidak aman "fitur" */ scanf ("%i", & angka); printf ("Konversi jenis apa yang Anda butuhkan?\ n "); printf (" tekan 'o' untuk oktal dan 'x' untuk heksadesimal.\N"); ketika((opsi = getChar ()) != Eof && (option = getChar ()) != '\ n')  mengalihkan(pilihan)  kasus 'o': printf ("Angka dalam oktal adalah 0%o.\ n ", angka); merusak; kasus 'X': printf ("Nomor dalam hex adalah 0x%x.\ n ", angka); merusak; bawaan: printf ("Opsi tidak valid.\N"); merusak;  kembali 0; 

Sekarang mari kita bedah program dan lihat apa dan bagaimana hal itu melakukan sesuatu. Satu hal yang baru diperkenalkan di sini adalah fungsi getChar (), sebagaimana didefinisikan dalam STDIO.H . Ini digunakan di sini untuk mendapatkan karakter tunggal dari input pengguna dan kemudian tulis karakter ke variabel. Kami bisa menggunakan opsi = getChar () sekali, sebelum sementara, tetapi kami menulis kode seperti ini untuk menekankan bagaimana Anda dapat menggunakannya. Kami akan menyerahkan kepada Anda untuk mencari tahu mengapa kami memeriksa EOF dan karakter baru, dan kami mendorong Anda untuk mencoba dan melihat apa yang terjadi jika Anda menghilangkan cek itu. Sintaks dari pernyataan sakelar cukup sederhana dan jelas, jadi kami akan cukup singkat.

Kami menggunakan istirahat; Dalam setiap kasus karena jika tidak, loop akan berlanjut ke tag berikutnya (tag adalah apa yang ditulis sebelum usus besar). Default: Tag tidak wajib, tetapi berguna untuk melakukan sesuatu jika tag lain cocok dengan data yang ada, dan juga dianggap sebagai praktik pemrograman yang baik. Sebagai latihan lain, kami sarankan Anda mencoba dan menulis ulang kode kami di bawah ini menggunakan scanf () alih -alih getChar () dan lihat bagaimana kelanjutannya. Apakah itu akan berhasil?

lakukan/sementara

Kami mengatakan sebelumnya bahwa sementara dan untuk mengevaluasi terlebih dahulu dan mengeksekusi setelahnya, jadi ada kemungkinan instruksi mungkin tidak akan pernah dieksekusi. Akan ada situasi saat Anda menginginkan sebaliknya, dan ini di mana/saat memasuki panggung. Aliran logis terbalik, dibandingkan dengan sementara, seperti pada do (sesuatu) sementara (condition_is_true). Jadi evaluasi selesai setelah Eksekusi, yang menjamin setidaknya satu putaran sebelum kompiler menyadari bahwa kondisinya salah (atau tidak).

Mari kita lihat bagaimana loop tak terbatas akan terlihat dengan do/while:

Mengerjakan printf ("Halo!\N"); ketika(1);

Anda cukup mencoba memverifikasi bagaimana aliran berjalan hanya dengan mengganti 1 dengan 0 dalam kode di atas dan melihat apa yang terjadi: program akan mencetak 'halo!'Sekali, sebelum menyadari bahwa ekspresi sementara dievaluasi sebagai salah. lakukan/sementara konstruksi biasanya kurang digunakan bahwa rekan -rekan mereka, tetapi Anda akan melihat bahwa ada situasi di mana mereka membuat hidup Anda lebih mudah. Bisakah Anda memberi contoh?

istirahat, lanjutkan, dan goto

Kami sudah "bertemu" istirahat sebelumnya, dan itu dapat dengan mudah digambarkan sebagai metode untuk keluar dari loop dengan cara lain selain default. Anda dapat menggunakannya dengan loop atau konstruksi saklar, sebagai lawan untuk melanjutkan, yang tidak masuk akal dalam sakelar. Kami akan menyerahkan kepada Anda untuk menulis beberapa kode di mana Break dan Lanjutan digunakan dan bermanfaat, dan kami akan melanjutkan dengan salah satu "musuh" programmer C: Goto. Saya mulai pemrograman dengan dasar, dan saya masih menggigil ketika saya ingat penggunaan goto di sana, dan sementara C juga memilikinya, penggunaannya tidak direkomendasikan dalam hal apa pun, mungkin kecuali untuk beberapa program terkait sistem. Tidak disarankan karena dengan goto Anda dapat dengan mudah mengubah pekerjaan Anda menjadi kode spageti, yaitu kode yang sangat sulit dibaca dan debug karena pembaca dipaksa untuk "melompat" ke berbagai bagian kode untuk memahaminya. Tapi demi kelengkapan, inilah cara kerjanya. Anda mendeklarasikan label, setelah itu Anda menetapkan beberapa instruksi untuk itu dan kemudian Anda dapat menggunakannya di bagian lain dari kode Anda. Biasanya Anda bisa lolos dengan fungsi khusus alih -alih ini, jadi gunakan goto hanya jika semuanya gagal.

jika(error_unknown) pergi ke kesalahan; /*[…]*/ Kesalahan: printf ("Kesalahan generik!.\N");

Sekarang setiap kali Anda memiliki kesalahan yang tidak diobati/tidak diketahui, Anda dapat menggunakan label goto kesalahan untuk mencetak pesan yang sangat membantu itu. Sekali lagi, hindari goto seperti wabah. Lebih mudah daripada yang mungkin Anda sadari untuk terbiasa dan menciptakan kebiasaan buruk menulis kode spageti. Kami tidak bisa cukup menekankan ini.

Kesimpulan

Asalkan Anda telah membaca bagian ini dengan hati -hati dan mencoba menyelesaikan tantangan yang kami ajukan, Anda sekarang telah membuat langkah lain di tanah pemrograman C. Cobalah membaca dan menulis sebanyak mungkin kode, dan jangan takut untuk bertanya apakah ada yang salah.

Inilah yang dapat Anda harapkan selanjutnya:

  • SAYA. C Perkembangan di Linux - Pendahuluan
  • Ii. Perbandingan antara C dan bahasa pemrograman lainnya
  • AKU AKU AKU. Jenis, Operator, Variabel
  • Iv. Alur kontrol
  • V. Fungsi
  • Vi. Pointer dan Array
  • Vii. Struktur
  • Viii. I/O Dasar
  • Ix. Gaya pengkodean dan rekomendasi
  • X. Membangun program
  • Xi. Kemasan untuk Debian dan Fedora
  • Xii. Mendapatkan paket di repositori resmi Debian

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Bash Scripting: Operator
  • Hal -hal yang harus diinstal pada Ubuntu 22.04
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Menguasai loop skrip bash
  • Ubuntu 20.04 Panduan
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…