Autor
|
Tema: [C] Duda con bucle (Leído 3,473 veces)
|
n-utz
Desconectado
Mensajes: 165
Babylon es el vampiro!
|
Buenas, tengo una duda sencilla, la cosa es que dentro de un while tengo dos bucles.
Primer bucle si se cumple, cambia el "flag" del while por lo que debería terminar allí y no ejecutarse el segundo bucle. La cosa es que al cumplirse el primer bucle y cambia correctamente el flag, primero ejecuta el segundo bucle y luego termina el WHILE.
Ahora mi pregunta, ¿existe alguna manera de que se lea la condicion del WHILE dentro de este sin que sea con un IF?. Es más que nada una duda para ampliar conocimientos, y no meter IF's donde no sea necesario. Porque me parece ridículo tener un WHILE y salir de este mediante una condición.
Gracias!
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Un if es lo más rápido. No hay nada "especial". while (...){ while(...){...} if(...) break; while(...){...} }
Hablas de ese if, no? Si es así, no hay ninguna forma más "rápida".
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Te propongo lo siguiente: bool entrar = true; do { while( ... && entrar) { ... entrar = false; } while(... && entrar){ .. } }while(entrar);
|
|
|
En línea
|
|
|
|
n-utz
Desconectado
Mensajes: 165
Babylon es el vampiro!
|
Si exactamente eso, bueno veo que esa parte no podre modificarla, entonces expongo otra duda. Mando una variable local de main, llamesmola vof en falso, a una funcion booleana que la cambia a verdadero. Todo esto surge dentro del WHILE, y que justamente es el flag de este. Ahora al devolver la variable vof a main, deberia aplicarla al famoso, "if(vof)break;", pero me obvia la variable, como si seguiria en falso. Ya intente poniendola en global, algun consejo? Adjunto codigo. while(!termina(ganador)){ printf("\nJuega jugador X\t"); fflush(stdout); scanf("%c", &mov); getchar(); movimientox(mov); termina(ganador); if(ganador)break;
printf("\nJuega jugador O\t"); fflush(stdout); scanf("%c", &mov2); getchar(); movimiento0(mov2); termina(ganador); }
bool termina(bool ganador){ //FUNCION int x, y;
for(x=0;x<3;x++){ y=0; if(tateti[x][y]==tateti[x][y+1] && tateti[x][y]==tateti[x][y+2]){ if(tateti[x][y]=='X')printf("GANO EL JUGADOR X, FELICITACIONES!"); if(tateti[x][y]=='O')printf("GANO EL JUGADOR O, FELICITACIONES!"); ganador=true; }}
for(y=0;y<3;y++){ x=0; if(tateti[x][y]==tateti[x+1][y] && tateti[x][y]==tateti[x+2][y]){ if(tateti[x][y]=='X')printf("GANO EL JUGADOR X, FELICITACIONES!"); if(tateti[x][y]=='O')printf("GANO EL JUGADOR O, FELICITACIONES!"); ganador=true; }}
return (ganador);
}
Se que no es recomendable imprimir o leer en una funcion, pero es un programa sencillo y no quise explayarlo mucho mas.
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
ganador = termina(ganador);
La variable cuando la pasas a la funcion, se pasa una copia del valor, y no la variable como tal. Entonces cuando el la funcion llamada se modifica el valor, en realidad estas modificando el valor de la copia, no el original. La unica forma de hacer que se modifique el valor real es mandando un apuntador a la misma. Saludos!
|
|
|
En línea
|
|
|
|
n-utz
Desconectado
Mensajes: 165
Babylon es el vampiro!
|
Cierto, me faltaba esa parte, pero seria lo mismo que poner asi if(termina(ganador)), no lo hago porque de esa manera entra nuevamente a la funcion, por lo que imprime nuevamente el printf.
El problema de porque imprimi dentro de la funcion es para diferenciar rapidamente el ganador. De ultima deberia cambiar eso.
|
|
|
En línea
|
|
|
|
|
JonaLamper
Desconectado
Mensajes: 394
|
No soy experto en C++, pero los que sí lo son me tienen dicho que no quieren ver break ni por asomo. Probablemente es mejor usar if como te dijo Alberto.
|
|
|
En línea
|
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
No soy experto en C++, pero los que sí lo son me tienen dicho que no quieren ver break ni por asomo. Probablemente es mejor usar if como te dijo Alberto.
Eso es solo un tecnisismo, realmene un break es simplemente una opción para romper un ciclo y condición y seguir adelante con un procedimiento, no deberia representar mayor problema si se usa adecuadamente. En cualquier while casi que es vital su uso.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda (Parar bucle con dato boolean) [bucle while]
Java
|
Dem0ny
|
5
|
18,579
|
17 Diciembre 2008, 17:43 pm
por Dem0ny
|
|
|
duda con bucle for
Java
|
andaluz
|
1
|
2,424
|
4 Mayo 2010, 22:35 pm
por Chuidiang
|
|
|
Duda bucle do...while
PHP
|
elkiy
|
2
|
2,126
|
22 Febrero 2013, 15:17 pm
por elkiy
|
|
|
Duda bucle do while
« 1 2 »
Programación C/C++
|
program_10
|
10
|
4,514
|
11 Enero 2015, 17:11 pm
por Yoel Alejandro
|
|
|
Duda C# Bucle While.
.NET (C#, VB.NET, ASP)
|
FKT
|
5
|
2,526
|
18 Agosto 2015, 16:05 pm
por FKT
|
|