C llaves en bucles

Iniciado por Pirat3net, 10 Septiembre 2013, 13:26 PM

0 Miembros y 1 Visitante están viendo este tema.

Pirat3net

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

eferion

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.

Pirat3net

#2
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{
}

eferion

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]