Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Pirat3net en 10 Septiembre 2013, 13:26 pm



Título: C llaves en bucles
Publicado por: Pirat3net en 10 Septiembre 2013, 13:26 pm
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 saver como le indica el programador cuando empieza y termina cada uno de los bucles
ahi va el codigo
Código
  1. for (i = 0; linea[i] != '\0'; i++)
  2.      for (j = 0; abc[j] != '\0'; j++)
  3.         if (linea[i] == abc[j]){
  4.            if (j + despl >= 26)
  5.               linea[i] = abc[(j + despl) - 26];
  6.            else
  7.               linea[i] = abc[j + despl];
  8.  
  9.            break;
  10.         }
gracias


Título: Re: C llaves en bucles
Publicado por: eferion en 10 Septiembre 2013, 13:35 pm
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:

Código
  1. if ( a == 1 )
  2.  a = 5; // entra en el if
  3. a = 2; // no entra en el if

Código
  1. if ( a == 1 )
  2.  if ( b == 2 ) // esta instruccion esta dentro del primer if
  3.    a = 5;       // esta instruccion esta dentro del segundo if y, en consecuencia,
  4.                    // dentro del primer if
  5. a = 2; // no esta dentro de ningun if

Código
  1. if ( a== 1 ) // 1er if
  2.  if ( b == 2 ) // 2o if, dentro de "1er if"
  3.    a = 5;       // dentro de 2o if y, por tanto, del 1er if
  4.  else            // else correspondiente al 2o if
  5.    if ( c == 3 ) // 3er if, esta dentro del else del 2o if
  6.      if ( d == 4 ) // 4ºif, esta dentro del 3er if
  7.        a = 1;       // dentro del 4o if
  8.      else            // else del 4o if
  9.        a = 0;      // dentro del else del 4o if
  10. 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.


Título: Re: C llaves en bucles
Publicado por: 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?


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
Código
  1. for(...)
  2. if(...){
  3. }else{
  4. }


Título: Re: C llaves en bucles
Publicado por: eferion en 10 Septiembre 2013, 13:55 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

Código
  1. for (i = 0; linea[i] != '\0'; i++) // 1er for
  2.      for (j = 0; abc[j] != '\0'; j++)  // 2o for, dentro del 1er for
  3.         if (linea[i] == abc[j]){ // 1er if dentro del 2o for
  4.            if (j + despl >= 26)  // 2o if dentro del 1er if
  5.               linea[i] = abc[(j + despl) - 26]; // dentro del 2o if
  6.            else  // else del 2o if
  7.               linea[i] = abc[j + despl]; // dentro del else del 2o if
  8.  
  9.            break; // esto esta dentro del 1er if, afecta unicamente al 2o for
  10.         }

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
Código
  1. for(...)
  2. if(...){
  3. }else{
  4. }

Las instrucciones if - else, van siempre de la mano y se ejecutan dentro del mismo ámbito SIEMPRE. Es decir:

Código
  1. for(...)
  2. if(...){ // esta dentro del for
  3. }else{ // este else corresponde al if, luego sigue dentro del for
  4. }
[/quote]