Introducción

Introducción

Ya ha estado expuesto a una pequeña parte de lo que se encuentra el control de flujo en nuestra parte anterior, a saber, la sección sobre operadores relacionales. A medida que comience a escribir programas más complejos, sentirá la necesidad de controlar el orden en el que su programa ejecuta varias piezas.
El control de flujo está presente en la mayoría de los lenguajes de programación de una forma u otra, y lo que está a punto de leer aquí es esencial para escribir programas C.

if/else/else if

Esta parte del control de flujo es probablemente la más intuitiva y simple, aunque puede caer fácilmente al lado oscuro y comenzar a escribir código ininteligible con IFS. La idea es simple: if (condición_is_true) do_something; else do_something_else; . Por lo tanto, se trata de lógica lógica, lógica binaria, en la que una expresión puede tener dos valores: Verdadero o Falso. Si usó C o Java, se usa con el tipo de datos de bool. Una variable bool solo puede ser verdadera o solo falsa en un momento dado. Pero C, aunque no tiene el tipo de datos de bool, facilita el lógica binaria, como verá.

Digamos que quiere decirle al usuario de su programa si es viejo o no, dependiendo de su edad. No del todo útil y posiblemente ofendiendo, pero en aras de ilustrar nuestro punto, lo hará. Entonces, la idea principal es: si la edad ingresada está por encima de un umbral, entonces le decimos al usuario que es viejo. Si no, le decimos que él/ella todavía es joven y florece. El código para dicho programa se vería así:

#Include #define Limit 50 int main () int Age; printf ("Hola, por favor ingrese su edad!\ n "); scanf ("%d ", y edad);  si(edad < LIMIT)  printf("Your age is %d.\n", age); printf("Quite young, I say.\n");  demás si(Age == Limit) printf ("Dices que tu edad es %D.\ n ", edad); printf (" casi allí.\ n "); demás printf ("para que su edad sea %d, eh?\ n ", edad); printf (" geezer.\ n "); devolver 0; 

Este programa no tiene ningún uso práctico, pero hay elementos que nos ayudarán a transmitir nuestro punto e ilustrar algunos elementos nuevos. Por ejemplo, verá que definimos un constante Límite llamado (se recomienda capitalizar sus constantes) con un valor de 50, que es el umbral del que hablamos anteriormente. A continuación, notará que C no usa 'entonces' después de la expresión IF como lo hace Bourne Shell, por ejemplo. Finalmente, escribimos este programa así porque podemos ilustrar otro concepto importante: bloques. Un bloque es una serie de instrucciones que pertenecen juntas, unidas por aparatos ortopédicos. Tenga en cuenta que si usa más si puede omitir la última otra cosa, dependiendo de la situación.

Entonces, nuestro primer bloque dice "Si la edad es menor que 50, imprima 'su edad es de $ edad' y Imprimir 'bastante joven, digo'. Cuando comience a leer el código de otras personas, notará que los bloques se usan mucho en C, y le recomendamos que los use cada vez que los necesite y, a veces, incluso cuando no lo haga, para que su código sea más accesible para simples mortales. Lo que significaba por "incluso cuando no lo haces"? Bueno, C le permite anidar IFS y las cosas pueden ir hacia el sur muy fácilmente y crear errores que sean difíciles de rastrear, o su código puede convertirse en un desastre para leer por otros e incluso usted, por lo que si planea usar realmente IFS y No puedo vivir sin ellos, le recomendamos que abuse del uso de aparatos ortopédicos para mayor claridad. Hay muchas situaciones en las que la lógica y el operador pueden ahorrarlo y hacer que su código se vuelva más legible. Considere el siguiente ejemplo:

int número = 3; si ((número> 2) && (número < 4))  printf ("number is three"); /* Esto podría haberse escrito así:*/ int número = 3; si (número> 2)  si (número < 4)  printf ("number is three");  

De nuevo, este es un ejemplo simple, pero creo que tienes el punto. Use cualquier método necesario y recuerde que '&&' no siempre es un sustituto de IFS anidado, pero si necesita demasiado complicado si las estructuras, probablemente necesite repensar la lógica de su programa.

mientras que para

Con esta sección de nuestro artículo, presentamos otro concepto esencial de programación C: bucles. Un bucle le permite repetir una determinada instrucción o bloqueo dependiendo de una condición, es decir, ejecute algo hasta que alguna condición cambie su valor de verdad de verdadero a falso. Como puede ver, este concepto está relacionado con instrucciones condicionales y se pueden usar juntos si es necesario.

mientras

El concepto teórico de while es 'while (expresion_is_true) ejecute_something;' . Con cada iteración, la expresión en reevaluado y si sigue siendo verdad, las instrucciones son/se ejecutan nuevamente, hasta que la expresión con la que probamos se vuelve falsa. Desde aquí podemos inferir que si queremos escribir un bucle infinito usando mientras, podemos escribir

mientras(1) do_stuff (); do_more_stuff (); 

Como dijimos, C no tiene una palabra clave BOOL, pero puede hacer algo para superar esto: puede compilar sus programas para adherirse a la edición C99 de la norma (-std = C99 como una bandera GCC), lo que permitirá que Acceda al tipo de datos _bool, puede usar stdbool.h que define 1 como verdadero y 0 como falso o puede definir verdadero y falso con las instrucciones del preprocesador. ¿Qué método crees que funcionaría mejor y por qué?? ¿Cómo reescribiría el fragmento de código arriba considerando lo que se dijo anteriormente??

De todos modos, continuemos con un ejemplo completo de trabajo. Digamos que queremos transmitir algún mensaje en la pantalla 5 veces. Hablaremos sobre el mismo ejemplo más adelante usando para, pero por ahora veamos cómo hacerlo mientras.

#include int main () int i; i = 5; mientras(i != 0) printf ("Hola!\ n "); i--; devolver 0;  

Entonces, mientras ejecuta las instrucciones entre sus aparatos != 0 'evalúa como falso, es cuando es igual a cero, luego se detiene. Para que este bucle funcione, necesitamos disminuir I en cada pase, hasta que alcanza cero.

Ejercicio

Ahora, considerando el siguiente diseño de control de flujo a su derecha, modifique el código anterior para conformarse. ¿Encuentras útiles estos diseños??

[CONSEJO]: Lea hasta el final del artículo, puede encontrar algunas sugerencias útiles allí.

para

Un bucle escrito con para es más compacto y organizado, pero hace lo mismo que un bucle de tiempo: evalúe una expresión y ejecute algo si la expresión es verdadera. Esto significa que hay situaciones en las que las instrucciones pueden no ejecutarse en absoluto, si la condición es falsa desde el principio. Verás en un capricho por qué es importante. Usar para VS es una cuestión de situación, hábito y preferencia personal, por lo que no hay nada que uno pueda hacer y el otro no puede.

A For Loop tiene tres partes: inicialización, bucle, incremento/disminución. Es importante saber que cualquier parte de los tres se puede omitir, pero los semicolones, como verán, deben permanecer. Entonces, un bucle infinito para que se vería así:

para(;;)  hacer algo(); hacer algo más(); 

Ahora, siempre que lo hayas declarado como un entero, pero no definido, ¿cómo escribirías el código que genera "Hola?!"Cinco veces usando un bucle para? Es bastante fácil cuando lo miras con cuidado, así que trate de evitar Google u otras fuentes de inspiración. La sensación que tendrás cuando habrás resuelto esto por ti mismo es casi nada.

interruptor/estuche

Si desea utilizar un programa interactivo y se da cuenta de que en un momento tendrá que lidiar con múltiples opciones, elegido de una lista de constantes, entonces cambiar es lo que necesita. Esta situación a menudo se encuentra al escribir aplicaciones interactivas, donde usará diálogos como este: “Si desea hacer eso, presione eso; Si necesita esto, presione esto ”y así sucesivamente. Por ejemplo, le mostraremos un programa que le muestra un valor entero que introduce en hexagonal u octal, dependiendo de su elección.

#include int main () opción char; int número; printf ("Ingrese el número que desea convertir.\norte"); /*Abstenerse de usar gets () debido a su  * "Características" inseguras */ scanf ("%i", y número); printf ("¿Qué tipo de conversión necesitas??\ n "); printf (" Presione 'O' para Octal y 'X' para Hexadecimal.\norte"); mientras((opción = getchar ()) != Eof && (opción = getchar ()) != '\ n')  cambiar(opción)  caso 'O': printf ("El número en Octal es 0%O.\ n ", número); romper; caso 'x': printf ("El número en hex es 0x%x.\ n ", número); romper; por defecto: printf ("opción no válida.\norte"); romper;  devolver 0; 

Ahora diseccionemos el programa y veamos qué y cómo hace las cosas. Una cosa recientemente introducida aquí es la función getchar (), como se define en stdio.H . Se usa aquí para obtener un carácter único desde la entrada del usuario y luego escriba el personaje a una variable. Podríamos haber usado opción = getchar () una vez, antes del tiempo, pero escribimos el código así para enfatizar cómo puede usarlo. Le dejaremos a usted descubrir por qué verificamos el EOF y el personaje de Newline, y le recomendamos que intente y vea qué sucede si omite esos cheques. La sintaxis de una instrucción Switch es bastante simple y por sí misma, por lo que seremos bastante breve.

Usamos Break; En todos los casos porque de lo contrario el bucle continuaría a la siguiente etiqueta (las etiquetas son lo que se escribe antes del colon). El valor predeterminado: la etiqueta no es obligatoria, pero es útil hacer algo en caso de que otra etiqueta coincida con los datos existentes, y también se considera una buena práctica de programación. Como otro ejercicio, le recomendamos que intente reescribir nuestro código a continuación usando scanf () en lugar de getchar () y vea cómo va. Funcionará?

hacer/mientras

Dijimos anteriormente que, mientras que evaluar primero y ejecutar después, por lo que hay posibilidades de que las instrucciones nunca se ejecuten. Habrá situaciones en las que desee el reverso exacto, y esto donde lo hace/mientras ingresa al escenario. El flujo lógico está invertido, en comparación con While, como en Do (algo) mientras (condición_is_true). Entonces la evaluación se realiza después La ejecución, que garantiza al menos una ronda antes de que el compilador se dé cuenta de que la condición es falsa (o no).

Veamos cómo se vería un bucle infinito con Do/While:

hacer printf ("Hola!\norte"); mientras(1);

Simplemente puede intentar verificar cómo va el flujo simplemente reemplazando 1 con 0 en el código anterior y ver qué sucede: el programa imprimirá 'Hola!'Una vez, antes de darse cuenta de que la expresión mientras se evalúa como falsa. do/Si bien las construcciones generalmente se usan menos que sus contrapartes, pero verá que hay situaciones en las que le hacen la vida más fácil. Puede dar un ejemplo?

romper, continuar y gotar

Ya "nos reunimos" antes, y se puede describir simplemente como el método para salir de un bucle de otras maneras que no sea el valor predeterminado. Puede usarlo con bucles o construcciones de interruptores, en lugar de continuar, lo que realmente no tiene sentido en un interruptor. Le dejaremos que escriba algún código donde se usen y continúen útiles, y continuaremos con uno de los "enemigos" del programador C: GoTo. Empecé a programar con Basic, y todavía me temblo cuando recuerdo el uso de GOTO allí, y aunque C también lo tiene, su uso no se recomienda en ningún caso, tal vez, excepto algunos programas relacionados con el sistema. No se recomienda porque con GOTO puede convertir fácilmente su trabajo en código de espagueti, es decir, código que es muy difícil de leer y depurar porque el lector se ve obligado a "saltar" a varias secciones del código para comprenderlo. Pero en aras de la integridad, así es como funciona. Declara una etiqueta, luego le asigna algunas instrucciones y luego puede usarla en diferentes partes de su código. Por lo general, puede salirse con una función personalizada en lugar de esto, así que use GOTO solo cuando todo lo demás falle.

si(Error_unknown) ir a error; /*[…]*/ Error: printf ("Error genérico!.\norte");

Ahora, cada vez que tenga un error no tratado/desconocido, puede usar la etiqueta de error GOTO para imprimir ese mensaje muy útil. De nuevo, evite a Goto como la peste. Es más fácil de lo que te das cuenta de acostumbrarte y crear un mal hábito de escribir código de espagueti. No podemos enfatizar esto lo suficiente.

Conclusión

Siempre que haya leído esta parte cuidadosamente e haya intentado resolver los desafíos que posamos, ahora ha dado otro paso en la tierra de la programación C. Intenta leer y escribir el mayor código posible, y no tengas miedo de preguntar si algo sale mal.

Esto es lo que puede esperar a continuación:

  • I. C Desarrollo en Linux - Introducción
  • II. Comparación entre C y otros lenguajes de programación
  • III. Tipos, operadores, variables
  • IV. Control de flujo
  • V. Funciones
  • VI. Punteros y matrices
  • VII. Estructuras
  • VIII. E/S básica
  • Ix. Estilo de codificación y recomendaciones
  • X. Construyendo un programa
  • Xi. Embalaje para Debian y Fedora
  • Xii. Obtener un paquete en los repositorios oficiales de Debian

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Scripting bash: operadores
  • Cosas para instalar en Ubuntu 22.04
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Mastering Bash Script Loops
  • Ubuntu 20.04 Guía
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..