elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C llaves en bucles
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C llaves en bucles  (Leído 2,641 veces)
Pirat3net

Desconectado Desconectado

Mensajes: 270


Ver Perfil
C llaves en bucles
« 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


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: C llaves en bucles
« Respuesta #1 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.


En línea

Pirat3net

Desconectado Desconectado

Mensajes: 270


Ver Perfil
Re: C llaves en bucles
« Respuesta #2 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. }
« Última modificación: 10 Septiembre 2013, 13:42 pm por Pirat3net » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: C llaves en bucles
« Respuesta #3 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]

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
llaves hasp
Ingeniería Inversa
gvilla 0 2,122 Último mensaje 8 Junio 2007, 18:13 pm
por gvilla
llaves hasp « 1 2 »
Ingeniería Inversa
pep240 14 16,796 Último mensaje 15 Diciembre 2009, 19:44 pm
por manuelhernandes
llaves jofemar
Electrónica
Franus 0 4,643 Último mensaje 19 Enero 2009, 20:46 pm
por Franus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines