Introduction

Introduction

Vous avez déjà été exposé à une petite partie de ce qu'est le contrôle des flux dans notre partie précédente, à savoir la section sur les opérateurs relationnels. Lorsque vous commencez à écrire des programmes plus complexes, vous ressentirez le besoin de contrôler le commande dans lequel votre programme exécute différentes pièces.
Le contrôle du flux est présent dans la plupart des langages de programmation sous une forme ou une autre, et ce que vous êtes sur le point de lire ici est essentiel pour écrire des programmes C.

Si / else / else si

Cette partie de la commande de flux est probablement la plus intuitive et la plus simple, bien que vous puissiez facilement tomber du côté obscur et commencer à écrire du code inintelligible avec IFS. L'idée est simple: if (condition_is_true) do_something; else do_something_else; . Il s'agit donc de logique, de logique binaire qui est, dans laquelle une expression peut avoir deux valeurs: vrai ou faux. Si vous avez utilisé C ou Java, vous êtes utilisé avec le type de données BOOL. Une variable bool peut être seulement vraie ou uniquement fausse à un moment donné. Mais C, bien qu'il n'ait pas le type de données Bool, facilite la gestion de la logique binaire, comme vous le verrez.

Disons que vous voulez dire à l'utilisateur de votre programme s'il est vieux ou non, selon son âge. Pas très utile et éventuellement offensant, mais pour illustrer notre point, il fera. L'idée principale est donc: si l'âge entré est au-dessus d'un seuil, alors nous disons à l'utilisateur qu'il est vieux. Sinon, nous lui disons qu'il / elle est encore jeune et fleurit. Le code pour un tel programme ressemblerait à ceci:

#include #define limite 50 int main () int Age; printf ("Bonjour, veuillez entrer votre âge!\ n "); scanf ("% d ", & age);  si(âge < LIMIT)  printf("Your age is %d.\n", age); printf("Quite young, I say.\n");  autre si(âge == limite) printf ("Vous dites que votre âge est en% D.\ n ", âge); printf (" presque là.\ n "); autre printf ("donc votre âge est% d, hein?\ n ", âge); printf (" geezer.\ n "); retour 0; 

Ce programme est clairement sans usage pratique, mais il y a des éléments qui nous aideront à faire passer notre point de vue et illustreront de nouveaux éléments. Par exemple, vous verrez que nous avons défini un constant Named Limit (il est recommandé de capitaliser vos constantes) avec une valeur de 50, qui est le seuil dont nous avons parlé ci-dessus. Ensuite, vous remarquerez que C n'utilise pas «alors» après l'expression IF comme le Shell Bourne, par exemple. Enfin, nous avons écrit ce programme comme celui-ci parce que nous pouvons illustrer un autre concept important: les blocs. Un bloc est une série d'instructions qui appartiennent ensemble, unie par des accolades. Veuillez garder à l'esprit que si vous utilisez d'autre si vous pouvez omettre le dernier autre, selon la situation.

Ainsi, notre premier bloc dit: «Si l'âge est inférieur à 50 ans, imprimez« votre âge est un âge $ » et Imprimez «assez jeune, je dis». Lorsque vous commencez à lire le code des autres, vous remarquerez que les blocs sont beaucoup utilisés en C, et nous vous recommandons de les utiliser chaque fois que vous en avez besoin et parfois même lorsque vous ne le faites pas, pour rendre votre code plus accessible aux simples mortels. Qu'entendait par «même lorsque vous ne le faites pas»? Eh bien, C vous permet de nicher de sites et les choses peuvent aller vers le sud très facilement et créer des bugs qui seront difficiles à tracer, ou votre code peut devenir un gâchis à lire par d'autres et même vous, donc si vous prévoyez vraiment d'utiliser des if imbriqués et Je ne peux pas vivre sans eux, nous vous recommandons d'abuser de l'utilisation des accolades pour plus de clarté. Il existe de nombreuses situations où le logique et l'opérateur peuvent vous sauver et rendre votre code plus lisible. Considérez l'exemple suivant:

int numéro = 3; si ((nombre> 2) && (numéro < 4))  printf ("number is three"); / * Cela aurait pu être écrit comme ceci: * / int numéro = 3; si (numéro> 2)  si (nombre < 4)  printf ("number is three");  

Encore une fois, c'est un exemple simple, mais je pense que tu as eu le point. Utilisez la méthode nécessaire et n'oubliez pas que '&&' n'est pas toujours un substitut aux IF imbriqués, mais si vous avez besoin de structures trop compliquées, vous devez probablement repenser la logique de votre programme.

tandis que pour

Avec cette section de notre article, nous introduisons un autre concept essentiel de la programmation C: Loops. Une boucle vous permet de répéter une certaine instruction ou un blocage en fonction d'une condition, c'est-à-dire exécuter quelque chose jusqu'à ce qu'une condition modifie sa valeur de vérité de vrai à false. Comme vous pouvez le voir, ce concept est lié à des instructions conditionnelles et ils peuvent être utilisés ensemble si besoin d'être.

alors que

Le concept théorique de WHI est 'while (expression_is_true) exécuter_something;' . À chaque itération, l'expression en réévaluée et si elle est toujours vraie, les instructions sont / sont exécutées à nouveau, jusqu'à ce que l'expression que nous testons devienne fausse. De là, nous pouvons déduire que si nous voulons écrire une boucle infinie en utilisant pendant que nous pouvons écrire

alors que(1) do_stuff (); do_more_stuff (); 

Comme nous l'avons dit, C n'a pas de mot-clé bool, mais vous pouvez faire quelque chose pour surmonter ceci: vous pouvez compiler vos programmes pour adhérer à l'édition C99 de la norme (-std = C99 en tant que drapeau GCC), qui permettra Vous accédez au type de données _bool, vous pouvez utiliser Stdbool.H qui définit 1 comme vrai et 0 comme faux ou vous pouvez définir vrai et faux avec les instructions du préprocesseur. Selon vous, quelle méthode fonctionnerait mieux et pourquoi? Comment réécririez-vous l'extrait de code ci-dessus compte tenu de ce qui a été dit ci-dessus?

Quoi qu'il en soit, continuons avec un exemple complet et fonctionnel. Disons que nous voulons diffuser un message à l'écran 5 fois. Nous parlerons du même exemple plus tard en utilisant pour, mais pour l'instant voyons comment le faire avec pendant que.

#include int main () int i; i = 5; alors que(je != 0) printf ("Bonjour!\ n "); i--; retour 0;  

Ainsi, tout en exécute les instructions entre ses accolades jusqu'à != 0 'Évalue comme faux, c'est à ce moment que je suis égal à zéro, puis il s'arrête. Pour que cette boucle fonctionne, nous devons diminuer à chaque passe, jusqu'à ce qu'il atteigne zéro.

Exercer

Maintenant, compte tenu de la conception de contrôle de flux suivant sur votre droite, modifiez le code ci-dessus pour se conformer. Trouvez-vous ces conceptions utiles?

[CONSEIL]: Lisez jusqu'à la fin de l'article, vous pourriez y trouver des conseils utiles.

pour

Une boucle écrite avec FOR est plus compacte et organisée, mais elle fait la même chose qu'une boucle while: évaluez une expression et exécutez quelque chose si l'expression est vraie. Cela signifie qu'il existe des situations où les instructions peuvent ne pas s'exécuter du tout si la condition est fausse depuis le début. Vous verrez dans un coup de tête pourquoi c'est important. Utiliser pour VS While est une question de situation, d'habitude et de préférence personnelle, donc il n'y a vraiment rien que l'on puisse faire et l'autre ne peut pas.

A For Loop a trois parties: initialisation, boucle, incrémente / décrémentation. Il est important de savoir que toute partie des trois peut être omise, mais les demi-colons, comme vous le verrez, doivent rester. Donc, une boucle infinie avec For ressemblerait à ceci:

pour(;;)  faire quelque chose(); do_something_else (); 

Maintenant, à condition que vous ayez déjà déclaré comme un entier, mais non défini, comment écririez-vous le code qui publie «Bonjour!"Cinq fois en utilisant une boucle pour? C'est assez facile lorsque vous le regardez attentivement, alors essayez d'éviter Google ou d'autres sources d'inspiration. Le sentiment que vous aurez quand vous aurez résolu cela pour vous-même est presque rien.

commutateur / boîtier

Si vous souhaitez utiliser un programme interactif et que vous vous rendez compte qu'à un moment donné, vous devrez faire face à plusieurs options, choisis parmi une liste de constantes, alors Switch est ce dont vous avez besoin. Cette situation est souvent rencontrée lors de la rédaction d'applications interactives, où vous utiliserez des dialogues comme ceci: «Si vous voulez le faire, appuyez sur cela; Si vous en avez besoin, appuyez sur ceci »et ainsi de suite. Par exemple, nous vous montrerons un programme qui vous montre une valeur entière que vous introduisez en hex.

#include int main () Char Option; numéro int; printf ("Veuillez saisir le numéro que vous souhaitez converti.\ n "); / * Veuillez vous abstenir d'utiliser get () à cause de son  * "fonctionnalités" non sécurisées * / scanf ("% i", & numéro); printf ("De quel type de conversion avez-vous besoin?\ n "); printf (" Press 'o' pour octal et 'x' pour hexadécimal.\ n "); alors que((option = getchar ()) != Eof && (option = getchar ()) != '\ n')  changer(option)  cas 'O': printf ("Le nombre en octal est 0% O.\ n ", numéro); casser; cas 'x': printf ("Le nombre en hex.\ n ", numéro); casser; défaut: printf ("Option non valide.\ n "); casser;  retour 0; 

Maintenant, disséquons le programme et voyons quoi et comment il fait les choses. Une chose nouvellement introduite ici est la fonction getchar (), telle que définie dans STdio.H . Il est utilisé ici pour obtenir un caractère unique de l'entrée de l'utilisateur, puis écrivez le caractère à une variable. Nous aurions pu utiliser l'option = getChar () une fois, avant le temps, mais nous avons écrit le code comme celui-ci pour souligner comment vous pouvez l'utiliser. Nous vous laisserons le coup pour comprendre pourquoi nous vérifions l'EOF et le personnage de Newline, et nous vous encourageons à essayer de voir ce qui se passe si vous omentiez ces chèques. La syntaxe d'une instruction Switch est assez simple et explicite, nous serons donc assez brefs.

Nous utilisons Break; Dans tous les cas, car sinon la boucle continuerait à la balise suivante (les balises sont ce qui est écrit avant le côlon). La valeur par défaut: la balise n'est pas obligatoire, mais il est utile de faire quelque chose au cas où une autre balise correspond aux données existantes, et elle est également considérée comme une bonne pratique de programmation. En tant qu'un autre exercice, nous vous recommandons d'essayer de réécrire notre code ci-dessous en utilisant Scanf () au lieu de getChar () et voir comment ça se passe. Est-ce que ça marchera?

faire pendant

Nous avons dit plus tôt que pendant que et pour évaluer d'abord et exécuter après, il y a donc des chances que les instructions ne soient jamais exécutées. Il y aura des situations où vous voudrez l'inverse exact, et c'est où faire / tout en entrant dans la scène. Le flux logique est inversé, par rapport à WHI, comme dans DO (quelque chose) while (condition_is_true). Donc l'évaluation est effectuée après L'exécution, qui garantit au moins un tour avant que le compilateur ne réalise que la condition est fausse (ou non).

Voyons à quoi ressemblerait une boucle infinie avec do / while:

faire printf ("Bonjour!\ n "); alors que(1);

Vous pouvez simplement essayer de vérifier comment le flux se déroule en remplaçant simplement 1 par 0 dans le code ci-dessus et voir ce qui se passe: le programme imprimera 'bonjour!'Une fois, avant de réaliser que l'expression tanguelle évalue comme fausse. faire / tandis que les constructions sont généralement moins utilisées que leurs homologues, mais vous verrez qu'il y a des situations où ils vous facilitent la vie. Pouvez-vous donner un exemple?

Break, continuez et goto

Nous avons déjà «rencontré» la pause auparavant, et elle peut être simplement décrite comme la méthode pour sortir d'une boucle par d'autres manières que la valeur par défaut. Vous pouvez l'utiliser avec des boucles ou des constructions de commutation, par opposition à continuer, ce qui n'a pas vraiment de sens dans un interrupteur. Nous vous laisserons pour écrire du code où la pause et la poursuite sont utilisées et utiles, et nous continuerons avec l'un des «ennemis» du programmeur C: Goto. J'ai commencé à programmer avec Basic, et je frissonne toujours quand je me souviens de l'utilisation de Goto là-bas, et bien que C ait aussi, son utilisation n'est pas recommandée en aucun cas, peut-être à l'exception de certains programmes liés au système. Ce n'est pas recommandé car avec Goto, vous pouvez facilement transformer votre travail en code spaghetti, c'est-à-dire un code très difficile à lire et à déboguer parce que le lecteur est obligé de «sauter» dans diverses sections du code afin de la comprendre. Mais par souci d'exhaustivité, voici comment ça marche. Vous déclarez une étiquette, après vous y attribuez des instructions, puis vous pouvez l'utiliser dans différentes parties de votre code. Habituellement, vous pouvez vous en sortir avec une fonction personnalisée au lieu de cela, alors utilisez Goto uniquement lorsque tout le reste échoue.

si(error_unknown) aller à erreur; / * […] * / Erreur: printf ("Erreur générique!.\ n ");

Maintenant, chaque fois que vous avez une erreur non traitée / inconnue, vous pouvez utiliser l'étiquette d'erreur Goto pour imprimer ce message très utile. Encore une fois, évitez Goto comme la peste. C'est plus facile que vous ne le réalisez pour vous y habituer et créer une mauvaise habitude d'écrire du code de spaghetti. Nous ne pouvons pas souligner suffisamment.

Conclusion

À condition que vous ayez lu attentivement cette partie et essayé de résoudre les défis que nous avons posés, vous avez maintenant fait une autre étape dans le pays de la programmation C. Essayez de lire et d'écrire autant de code que possible, et n'ayez pas peur de demander si quelque chose ne va pas.

Voici ce à quoi vous pouvez vous attendre ensuite:

  • je. C Développement sur Linux - Introduction
  • Ii. Comparaison entre C et d'autres langages de programmation
  • III. Types, opérateurs, variables
  • Iv. Contrôle de flux
  • V. Les fonctions
  • Vi. Pointeurs et tableaux
  • Vii. Structure
  • Viii. E / S de base
  • Ix. Style de codage et recommandations
  • X. Construire un programme
  • Xi. Emballage pour Debian et Fedora
  • Xii. Obtenir un forfait dans les référentiels officiels Debian

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Scénarios: opérateurs
  • Choses à installer sur Ubuntu 22.04
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Masterring Bash Script Loops
  • Ubuntu 20.04 Guide
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Système linux hung? Comment s'échapper vers la ligne de commande et…