Autor
|
Tema: C llaves en bucles (Leído 2,626 veces)
|
Pirat3net
Desconectado
Mensajes: 270
|
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 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
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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 línea
|
|
|
|
Pirat3net
Desconectado
Mensajes: 270
|
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{ }
|
|
« Última modificación: 10 Septiembre 2013, 13:42 pm por Pirat3net »
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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 }
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]
|
|
|
En línea
|
|
|
|
|
|