while usando salir repetir que programacion mientras lenguaje for else ejemplos ciclo c loops while-loop switch-statement infinite-loop

usando - repetir mientras c++



Cambiar instrucción dentro del ciclo while en C (6)

Hay varias publicaciones relacionadas con instrucciones de conmutación dentro de while loops, excepto por el hecho de que ninguna de ellas se realiza en C, al menos por lo que he visto. C ++ puede crear expresiones booleanas, que yo conozco, pero no en C. Tengo un ciclo while que contiene un control de conmutación. Sin embargo, cuando escribo declaraciones de interrupción dentro de mi interruptor, vuelve al principio del ciclo y hace que mi programa se ejecute para siempre. Ignora las funciones que uso, porque funcionan con seguridad. Solo necesito algunas aclaraciones sobre mi manejo del anidamiento. ¡Gracias!

Here is my main.c: while(1) { printf("0) Exit/n1) List Tasks/n2) Add Task/n"); printf("3)Delete Task/n4) Add Task From File/n"); printf("What would you like to do?/n"); fgets(buf1, 50, stdin); p = atoi(buf1); switch(p) { case 0: break; case 1: printTaskList(pTaskList); break; case 2: printf("Enter task name: "); fgets(buf2,100,stdin); printf("Enter task priority: "); fgets(buf3,100,stdin); printf("Enter task start date: "); fgets(buf4,50,stdin); pTask = makeTask(buf2,buf4,buf3); addTaskToEnd(pTaskList,pTask); break; case 3: printTaskList(pTaskList); printf("What task would you like to delete? "); fgets(buf6,50,stdin); taskNum = atoi(buf6); removeTask(pTaskList,taskNum); break; case 4: printf("Enter the filename "); fgets(buf7,50,stdin); break; default: printf("ERROR: %d: Incorrect menu option/n", p); } }


C ++ puede crear expresiones booleanas, que yo conozco, pero no en C.

¿Oh? Entonces, ¿qué es 0 == 0 , si no es una expresión booleana? Si se refiere a una variable del tipo bool , asegúrese de #include <stdbool.h> .

Sin embargo, cuando escribo declaraciones de interrupción dentro de mi interruptor, vuelve al principio del ciclo y hace que mi programa se ejecute para siempre. Ignora las funciones que uso, porque funcionan con seguridad. Solo necesito algunas aclaraciones sobre mi manejo del anidamiento. ¡Gracias!

No. No regresa al comienzo del ciclo. La ejecución continúa desde el final de la declaración de conmutación (inmediatamente después de que el switch cierre, } ). En su circunstancia, esto es funcionalmente idéntico a volver al principio del ciclo .

Hay algunas opciones disponibles para usted. Otros sugieren utilizar una única variable para controlar su ciclo. Esta sería una buena idea, pero sugieren utilizar nuevas variables, a pesar de que la variable ya existe en su lógica. Si quieres resolver tu problema de esta manera, considera:

do { /* ... */ } while (p != 0);

Alternativamente, return de main cuando desee salir, o llame a exit(0); de otras funciones. Esto no es tan útil si desea ejecutar un código de limpieza / salida adicional.

En este escenario, la estructura de control del switch no es realmente mejor que una cadena de ramas if / else if / else . Si utilizara las ramas if / else if / else , podría break; fuera del circuito más fácilmente. Usaría una estructura de control de switch cuando quisiera que la ejecución fluya a otros casos.

Como otra opción, podría usar una expresión goto para salir del bucle hacia una etiqueta fuera de la línea principal. Esto sería mejor cuando hay múltiples puntos de salida posibles desde el bucle, como el manejo y la limpieza después de los errores de asignación.


Su descanso solo deja la declaración de cambio, luego continúa en el

while(1)

lazo por siempre


Usted nunca sale del ciclo. El descanso simplemente romperá tu interruptor. Debes reemplazar

while(1)

con algo más que implica que el ciclo while debería salir


break; saldrá del switch o lazo circundante más cercano. Para saltar dos niveles, tendrás que usar el goto temido o reorganizar para que un return logre la semántica deseada.

while(1) { switch(x) { case 0: goto EndWhile; } } EndWhile: ;

O

void loop() { while(1) { switch(x) { case 0: return; } } } //... loop(); //...

Puede usar totalmente una expresión booleana en C. Simplemente use una int .

int quit = 0; while(!quit) { switch(x) { case 0: quit = 1; break; } }

C también tiene un tipo de datos booleanos, si realmente lo desea.

#include <stdbool.h> bool quit = false; while(!quit) { switch(x) { case 0: quit = true; break; } }

Y una opción más, para los totalmente locos.

#include <setjmp.h> jmp_buf jbuf; if (!setjmp(jbuf)) while(1) { switch(x) { case 0: longjmp(jbuf, 1); } }


También puede tener expresiones booleanas en C. El estándar C de 1999 tiene un encabezado stdbool.h y un tipo de datos bool . En los dialectos C más antiguos, como el de Visual Studio 2012 (!), No hay ningún tipo de datos booleanos, por lo que debe usar en su lugar los simples:

int keep_looping = 1; while (keep_looping) { .... if (....) keep_looping = 0; }


use exit (0);
donde quieras salir

In this partcular case you have to put the condition in the while loop parameter

otras formas de salir del ciclo while pueden ser: return statement. Pero esto también saldrá de la función actual.

La solución adecuada podría ser usar la goto label; dentro del interruptor y luego usa la label: statement; fuera del ciclo while.

P.ej:

while(1){ switch(x){ case 0:goto label; default:break; } } label: printf("out of while loop");