bueno, mi duda es la siguiente, tengo un codigo en el que los bucles for no estan delimitados con llaves, y no se cual es la "regla", para saber como le indica el programador cuando empieza y termina cada uno de los bucles
ahi va el codigo
for (i = 0; linea[i] != '\0'; i++)
for (j = 0; abc[j] != '\0'; j++)
if (linea[i] == abc[j]){
if (j + despl >= 26)
linea[i] = abc[(j + despl) - 26];
else
linea[i] = abc[j + despl];
break;
}
gracias
Si no hay llaves, el bucle afecta únicamente a la siguiente instrucción.
El problema es que si tienes bucles anidados, como es el caso, la "siguiente instrucción" puede implicar varias líneas.
Me explico:
if ( a == 1 )
a = 5; // entra en el if
a = 2; // no entra en el if
if ( a == 1 )
if ( b == 2 ) // esta instruccion esta dentro del primer if
a = 5; // esta instruccion esta dentro del segundo if y, en consecuencia,
// dentro del primer if
a = 2; // no esta dentro de ningun if
if ( a== 1 ) // 1er if
if ( b == 2 ) // 2o if, dentro de "1er if"
a = 5; // dentro de 2o if y, por tanto, del 1er if
else // else correspondiente al 2o if
if ( c == 3 ) // 3er if, esta dentro del else del 2o if
if ( d == 4 ) // 4ºif, esta dentro del 3er if
a = 1; // dentro del 4o if
else // else del 4o if
a = 0; // dentro del else del 4o if
a = 2; // no esta dentro de ningun if
Para evitar este caos, lo más lógico es emplear llaves cuando el contenido del bucle ocupe más de una instrucción.
en consecuenca en mi codigo los dos for terminarian inmediatamente cuando termine el if si e entendido bien, una ultima cosa, cuano tengo bucles anidados, el los break/continue, afectan solo al bucle menor, es decir, al que esta declarado dentro del bucle general, o afectan a todos los bucles superiores?
gracias por la respuesta
PD MODIFICADO: claro, pero esque ahora tengo la duda, si la siguiente linea es un if y le sigue un else, el bucle sin llaves afectaria solo a el if, o tomaria el conjunto if else?
me refiero a el caso
for(...)
if(...){
}else{
}
Cita de: Pirat3net en 10 Septiembre 2013, 13:37 PM
en consecuenca en mi codigo los dos for terminarian inmediatamente cuando termine el if si e entendido bien, una ultima cosa, cuano tengo bucles anidados, el los break/continue, afectan solo al bucle menor, es decir, al que esta declarado dentro del bucle general, o afectan a todos los bucles superiores?
Los break y continue solo afectan al bucle más cercano que tengan. Es decir
for (i = 0; linea[i] != '\0'; i++) // 1er for
for (j = 0; abc[j] != '\0'; j++) // 2o for, dentro del 1er for
if (linea[i] == abc[j]){ // 1er if dentro del 2o for
if (j + despl >= 26) // 2o if dentro del 1er if
linea[i] = abc[(j + despl) - 26]; // dentro del 2o if
else // else del 2o if
linea[i] = abc[j + despl]; // dentro del else del 2o if
break; // esto esta dentro del 1er if, afecta unicamente al 2o for
}
Cita de: Pirat3net en 10 Septiembre 2013, 13:37 PM
PD MODIFICADO: claro, pero esque ahora tengo la duda, si la siguiente linea es un if y le sigue un else, el bucle sin llaves afectaria solo a el if, o tomaria el conjunto if else?
me refiero a el caso
for(...)
if(...){
}else{
}
Las instrucciones if - else, van siempre de la mano y se ejecutan dentro del mismo ámbito SIEMPRE. Es decir:
for(...)
if(...){ // esta dentro del for
}else{ // este else corresponde al if, luego sigue dentro del for
}
[/quote]