Pengenalan

Pengenalan

Anda telah terdedah kepada sebahagian kecil daripada kawalan aliran yang ada di bahagian sebelumnya, iaitu bahagian mengenai pengendali relasi. Semasa anda mula menulis program yang lebih kompleks, anda akan merasakan keperluan untuk mengawal pesanan di mana program anda melaksanakan pelbagai bahagian.
Kawalan aliran hadir dalam kebanyakan bahasa pengaturcaraan dalam satu bentuk atau yang lain, dan apa yang akan anda baca di sini adalah penting untuk menulis program C.

jika/lain/lain jika

Bahagian kawalan aliran ini mungkin yang paling intuitif dan lebih mudah, walaupun anda boleh dengan mudah jatuh ke sisi gelap dan mula menulis kod yang tidak dapat difahami dengan IFS. Idea ini mudah: jika (condition_is_true) do_something; lain do_something_else; . Oleh itu, ini mengenai logik, logik binari yang, di mana ungkapan boleh mempunyai dua nilai: benar atau palsu. Sekiranya anda menggunakan C atau Java, anda digunakan dengan datatype bool. Pemboleh ubah bool hanya boleh benar atau hanya palsu pada masa tertentu. Tetapi C, walaupun ia tidak mempunyai datatype bool, memudahkan untuk menangani logik binari, seperti yang anda lihat.

Katakan anda ingin memberitahu pengguna program anda jika dia sudah tua atau tidak, bergantung pada usianya. Tidak cukup berguna dan mungkin menyinggung perasaan, tetapi demi menggambarkan titik kita, ia akan dilakukan. Jadi idea utama adalah: jika usia yang dimasukkan berada di atas ambang, maka kami memberitahu pengguna bahawa dia sudah tua. Jika tidak, kami memberitahunya dia masih muda dan mekar. Kod untuk program sedemikian akan kelihatan seperti ini:

#include #define Limit 50 int main () int umur; printf ("Helo, sila masukkan usia anda!\ n "); scanf ("%d ", & umur);  jika(Umur < LIMIT)  printf("Your age is %d.\n", age); printf("Quite young, I say.\n");  lain jika(umur == had) printf ("Anda katakan umur anda adalah %d.\ n ", umur); printf (" Hampir di sana.\ n "); lain printf ("Jadi umur anda adalah %d, huh?\ n ", umur); printf (" geezer.\ n "); kembali 0; 

Program ini jelas tidak menggunakan praktikal, tetapi ada unsur -unsur di dalamnya yang akan membantu kita mendapatkan titik kita dan menggambarkan beberapa elemen baru. Contohnya anda akan melihat kami menentukan a malar Batasan bernama (disarankan untuk memanfaatkan pemalar anda) dengan nilai 50, yang merupakan ambang yang kita bicarakan di atas. Seterusnya anda akan melihat bahawa c tidak menggunakan 'maka' selepas ungkapan jika seperti shell bourne, sebagai contoh. Akhirnya, kami menulis program ini seperti ini kerana kami dapat menggambarkan satu lagi konsep penting: blok. Blok adalah satu siri arahan yang dimiliki bersama, bersatu dengan pendakap. Harap maklum bahawa jika anda menggunakan yang lain jika anda dapat menghilangkan final lain, bergantung pada keadaan.

Jadi, blok pertama kami berkata "Jika umur lebih kecil daripada 50, cetak 'umur anda adalah $ usia' dan Cetak 'cukup muda, saya katakan'. Apabila anda mula membaca kod orang lain, anda akan melihat blok banyak digunakan di C, dan kami mengesyorkan anda menggunakannya apabila anda memerlukannya dan kadang -kadang walaupun anda tidak, untuk menjadikan kod anda lebih mudah untuk manusia semata -mata. Apa yang dimaksudkan dengan "walaupun anda tidak"? Nah, c membolehkan anda bersarang dan perkara boleh pergi ke selatan dengan mudah dan membuat pepijat yang sukar untuk dikesan, atau kod anda boleh menjadi kekacauan untuk dibaca oleh orang lain dan bahkan anda, jadi jika anda merancang untuk benar -benar menggunakan bersarang dan Tidak dapat hidup tanpa mereka, kami mengesyorkan anda menyalahgunakan penggunaan pendakap untuk kejelasan. Terdapat banyak situasi di mana logik dan pengendali dapat menjimatkan anda dan menjadikan kod anda menjadi lebih mudah dibaca. Pertimbangkan contoh berikut:

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

Sekali lagi, ini adalah contoh yang mudah, tetapi saya fikir anda mendapat titik. Gunakan kaedah apa sahaja yang diperlukan dan ingat bahawa '&&' tidak semestinya pengganti IF bersarang, tetapi jika anda memerlukan terlalu rumit jika struktur, anda mungkin perlu memikirkan semula logik program anda.

sementara dan untuk

Dengan bahagian artikel ini, kami memperkenalkan satu lagi konsep penting pengaturcaraan C: Gelung. Gelung membolehkan anda mengulangi arahan atau blok tertentu bergantung pada keadaan, iaitu, melaksanakan sesuatu sehingga keadaan mengubah nilai kebenarannya dari yang benar ke palsu. Seperti yang anda lihat, konsep ini berkaitan dengan arahan bersyarat dan mereka boleh digunakan bersama jika perlu.

manakala

Konsep teoritis sementara adalah 'sementara (expression_is_true) melaksanakan_something;' . Dengan setiap lelaran, ungkapan yang dinilai semula dan jika ia masih benar, arahan (s) adalah/dilaksanakan semula, sehingga ungkapan yang kita uji terhadap menjadi palsu. Dari sini kita dapat menyimpulkan bahawa jika kita mahu menulis gelung tak terhingga menggunakan sementara, kita boleh menulis

manakala(1) do_stuff (); do_more_stuff (); 

Seperti yang kita katakan, C tidak mempunyai kata kunci bool, tetapi anda boleh melakukan sesuatu untuk mengatasinya: anda boleh menyusun program anda untuk mematuhi edisi C99 standard (-std = c99 sebagai bendera GCC), yang akan membolehkan anda mengakses datatype _bool, anda boleh menggunakan stdbool.H yang mentakrifkan 1 sebagai benar dan 0 sebagai palsu atau anda boleh menentukan benar dan palsu dengan arahan preprocessor. Kaedah apa yang anda fikir akan berfungsi dengan lebih baik dan mengapa? Bagaimana anda menulis semula coretan kod di atas memandangkan apa yang dikatakan di atas?

Bagaimanapun, mari kita teruskan dengan contoh yang lengkap dan lengkap. Katakan kita mahu mengeluarkan beberapa mesej pada skrin 5 kali. Kami akan bercakap mengenai contoh yang sama kemudian digunakan untuk, tetapi buat masa ini mari kita lihat bagaimana untuk melakukannya dengan sementara.

#include int main () int i; i = 5; manakala(i != 0) printf ("Hello!\ n "); i--; kembali 0;  

Oleh itu, semasa melaksanakan arahan antara pendakapnya sehingga 'i != 0 'menilai sebagai palsu, iaitu ketika saya sama dengan sifar, maka ia berhenti. Untuk gelung ini berfungsi, kita perlu menurunkan saya pada setiap pas, sehingga mencapai sifar.

Senaman

Sekarang, memandangkan reka bentuk kawalan aliran berikut di sebelah kanan anda, ubah kod di atas untuk disesuaikan. Adakah anda mendapati reka bentuk ini berguna?

[Petua]: Baca sehingga akhir artikel, anda mungkin dapati beberapa petunjuk berguna di sana.

untuk

Gelung yang ditulis dengan lebih padat dan teratur, tetapi ia melakukan perkara yang sama seperti gelung sementara: menilai ungkapan dan melaksanakan sesuatu jika ungkapan itu benar. Ini bermakna terdapat situasi di mana arahan tidak boleh dilaksanakan sama sekali, jika keadaan itu palsu dari awal. Anda akan melihat dengan sesuka hati mengapa ini penting. Menggunakan untuk vs sementara adalah soal situasi, kebiasaan dan keutamaan peribadi, jadi tidak ada apa -apa yang dapat dilakukan dan yang lain tidak dapat.

A untuk gelung mempunyai tiga bahagian: permulaan, gelung, kenaikan/pengurangan. Penting untuk mengetahui bahawa mana -mana bahagian dari ketiga -tiga mereka boleh ditinggalkan, tetapi titik koma, seperti yang anda lihat, mesti kekal. Jadi, gelung tak terhingga dengan akan kelihatan seperti ini:

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

Sekarang, dengan syarat anda telah saya telah diisytiharkan sebagai integer, tetapi tidak ditakrifkan, bagaimana anda akan menulis kod yang mengeluarkan "Hello!"Lima kali menggunakan gelung untuk? Cukup mudah apabila anda melihatnya dengan teliti, jadi cuba mengelakkan Google atau sumber inspirasi lain. Perasaan yang anda akan ada apabila anda akan menyelesaikan ini untuk diri sendiri tidak ada apa -apa.

suis/kes

Sekiranya anda ingin menggunakan program interaktif dan anda menyedari bahawa pada satu ketika, anda perlu berurusan dengan pelbagai pilihan, dipilih dari senarai pemalar, maka suis adalah apa yang anda perlukan. Keadaan ini sering ditemui semasa menulis aplikasi interaktif, di mana anda akan menggunakan dialog seperti ini: "Jika anda mahu melakukannya, tekannya; Sekiranya anda memerlukan ini, tekan ini "dan sebagainya. Contohnya, kami akan menunjukkan kepada anda program yang menunjukkan nilai integer yang anda perkenalkan di Hex atau Octal, bergantung pada pilihan anda.

#include int main () char option; nombor int; printf ("Sila masukkan nombor yang anda mahu tukar.\ n "); /*Jangan menahan diri daripada menggunakan got () kerana itu  * ciri -ciri tidak selamat " */ scanf ("%i", & nombor); printf ("Apa jenis penukaran yang anda perlukan?\ n "); printf (" tekan 'o' untuk oktal dan 'x' untuk hexadecimal.\ n "); manakala((opsyen = getChar ()) != Eof && (option = getChar ()) != '\ n')  suis(pilihan)  kes 'o': printf ("Nombor dalam oktal adalah 0%o.\ n ", nombor); rehat; kes 'x': printf ("Nombor dalam hex ialah 0x%x.\ n ", nombor); rehat; lalai: printf ("Pilihan tidak sah.\ n "); rehat;  kembali 0; 

Sekarang mari kita membedah program dan melihat apa dan bagaimana keadaannya. Satu perkara yang baru diperkenalkan di sini adalah fungsi getChar (), seperti yang ditakrifkan dalam stdio.h . Ia digunakan di sini untuk mendapatkan watak tunggal dari input pengguna dan kemudian tulis watak ke pemboleh ubah. Kami boleh menggunakan pilihan = getChar () sekali, sebelum ini, tetapi kami menulis kod seperti ini untuk menekankan bagaimana anda boleh menggunakannya. Kami akan menyerahkannya kepada anda untuk mengetahui mengapa kami menyemak EOF dan watak baru, dan kami menggalakkan anda untuk mencuba dan melihat apa yang berlaku jika anda menghilangkan cek tersebut. Sintaks pernyataan suis cukup mudah dan jelas, jadi kami akan cukup ringkas.

Kami menggunakan rehat; Dalam setiap kes kerana jika tidak, gelung akan terus menjadi tag seterusnya (tag adalah apa yang ditulis sebelum kolon). Lalai: tag tidak wajib, tetapi berguna untuk melakukan sesuatu sekiranya tag lain sepadan dengan data yang ada, dan ia juga dianggap sebagai amalan pengaturcaraan yang baik. Sebagai satu lagi latihan, kami mengesyorkan anda mencuba dan menulis semula kod kami di bawah menggunakan scanf () dan bukannya getchar () dan lihat bagaimana keadaannya. Adakah ia akan berfungsi?

lakukan/sementara

Kami berkata sebelum ini bahawa sementara dan untuk menilai terlebih dahulu dan melaksanakan selepas itu, jadi ada kemungkinan arahan mungkin tidak akan dilaksanakan. Akan ada situasi apabila anda mahu sebaliknya, dan ini di mana memasuki panggung. Aliran logik terbalik, berbanding dengan sementara, seperti dalam (sesuatu) sementara (condition_is_true). Jadi penilaian dilakukan selepas Pelaksanaan, yang menjamin sekurang -kurangnya satu pusingan sebelum pengkompil menyedari bahawa keadaan itu palsu (atau tidak).

Mari kita lihat bagaimana gelung tak terhingga akan kelihatan seperti DO/WHILE:

lakukan printf ("Helo!\ n "); manakala(1);

Anda hanya boleh cuba mengesahkan bagaimana aliran berjalan dengan hanya menggantikan 1 dengan 0 dalam kod di atas dan melihat apa yang berlaku: program akan mencetak 'hello!'Sekali, sebelum menyedari bahawa ekspresi sementara menilai sebagai palsu. lakukan/sementara pembinaan biasanya kurang digunakan bahawa rakan -rakan mereka, tetapi anda akan melihat bahawa ada situasi di mana mereka menjadikan hidup anda lebih mudah. Bolehkah anda memberi contoh?

rehat, teruskan, dan goto

Kami sudah "bertemu" sebelum ini, dan ia hanya boleh digambarkan sebagai kaedah keluar dari gelung dengan cara lain daripada lalai. Anda boleh menggunakannya dengan gelung atau menukar pembinaan, berbanding dengan meneruskan, yang tidak masuk akal dalam suis. Kami akan menyerahkannya kepada anda untuk menulis beberapa kod di mana Break and Continue digunakan dan berguna, dan kami akan meneruskan dengan salah satu "musuh" programmer C: Goto. Saya memulakan pengaturcaraan dengan Basic, dan saya masih menggigil apabila saya ingat penggunaan Goto di sana, dan sementara C memilikinya, penggunaannya tidak disyorkan dalam apa jua keadaan, mungkin kecuali beberapa program yang berkaitan. Ia tidak disyorkan kerana dengan Goto, anda boleh dengan mudah mengubah kerja anda menjadi kod spageti, iaitu kod yang sangat sukar untuk dibaca dan debug kerana pembaca terpaksa "melompat" ke pelbagai bahagian kod untuk memahaminya. Tetapi demi kesempurnaan, inilah cara ia berfungsi. Anda mengisytiharkan label, selepas itu anda memberikan beberapa arahan kepadanya dan kemudian anda boleh menggunakannya dalam pelbagai bahagian kod anda. Biasanya anda boleh lari dengan fungsi tersuai dan bukannya ini, jadi gunakan goto hanya apabila semuanya gagal.

jika(error_unknown) pergi ke ralat; /*[...]*/ Ralat: Printf ("Ralat generik!.\ n ");

Sekarang apabila anda mempunyai ralat yang tidak dirawat/tidak diketahui, anda boleh menggunakan label Goto ralat untuk mencetak mesej yang sangat berguna. Sekali lagi, elakkan goto seperti wabak. Lebih mudah daripada yang anda mungkin sedar untuk membiasakan diri dan membuat tabiat buruk menulis kod spageti. Kita tidak dapat menekankan ini cukup.

Kesimpulan

Dengan syarat anda telah membaca bahagian ini dengan teliti dan cuba menyelesaikan cabaran yang kami jalankan, anda kini telah membuat langkah lain di tanah pengaturcaraan C. Cuba baca dan tulis seberapa banyak kod yang mungkin, dan jangan takut untuk bertanya apakah ada yang salah.

Inilah yang boleh anda harapkan seterusnya:

  • I. C Pembangunan di Linux - Pengenalan
  • Ii. Perbandingan antara c dan bahasa pengaturcaraan lain
  • Iii. Jenis, pengendali, pembolehubah
  • Iv. Kawalan aliran
  • V. Fungsi
  • Vi. Petunjuk dan tatasusunan
  • VII. Struktur
  • Viii. Asas I/O
  • Ix. Gaya dan cadangan pengekodan
  • X. Membina program
  • Xi. Pembungkusan untuk Debian dan Fedora
  • Xii. Mendapatkan pakej di repositori debian rasmi

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Skrip bash: pengendali
  • Perkara yang perlu dipasang di Ubuntu 22.04
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Menguasai Gelung Skrip Bash
  • Ubuntu 20.04 Panduan
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
  • Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..