fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Operacion en C
 
Avisos
Vaciar todo

Operacion en C

14 Respuestas
6 Usuarios
0 Reactions
6,002 Visitas
qkiyo
Respuestas: 106
Topic starter
(@qkiyo)
Estimable Member
Registrado: hace 18 años

Wenas!
Tengo una dudilla sobre una operación en C. Se que en lenguaje ensamblador se puede crear "etiquetas" y en cualquier momento de un programa acudir a ellas, parecido a las funciones. Pero, ¿como se puede hacer en C una de esas "etiquetas" y saltar a esa linea cuando yo quiera?

Por ejemplo:

CODIGO; <- Esta seria la etiqueta

if (....lo k sea)
if (....lo k sea)
if (....lo k sea)
"salta a la etiketa CODIGO"

El motivo es por poder salir de una serie de condiciones, que si se han cumplido, pues salte a otra parte de mi programa (pero no que salte a una funcion). No se si ha kedado klara mi duda... Alguien se le ocurre algo??
Muxas gracias!y SaLu2!!

PD: Ah! y otra duda, se como hacer que una funcion devuelva un dato, una variable, pero ¿como hacer para que devuelva 4 valores por ejemplo?

Responder
13 respuestas
joviwap
Respuestas: 301
(@joviwap)
Ardero
Registrado: hace 19 años

Hola Qkiyo,

Eso que quieres hacer se puede hacer con la instruccion GOTO, pero en C es una opci'on nada recomendada porque hace el código difícil de leer y en los procesadores modernos hace que el código sea más lento (debido a que no funciona el sistema de predicción de saltos).

Así que te propongo que investigues sobre las instrucción BREAK, que es lo mas aproximado a lo que tu buscas.
int i=0;
while(1){ --bucle infinito
i+=1;
if i==6
break; -- sale del bucle infinito cuando "i" vale 6
}

Tambien puedes replantearte hacer de otra forma el bucle o siempre puedes utilizar funciones, y cuando quieras salir de la función usas un RETURN
void mifuncion(int numero){
while(1){ --bucle infinito
numero+=1;
if numero==6
return; -- sale de la función cuando "i" vale 6
}

void main(){
int i=0;
mifuncion(i);
}

Espero que te sirvan estas indicaciones

Un saludo.

Responder
qkiyo
Respuestas: 106
Topic starter
(@qkiyo)
Estimable Member
Registrado: hace 18 años

Gracias joviwap;) . Creo que podría servirme la instruccion RETURN, la funcion que hace es parecida a la de un BREAK dentro de un SWITCH no?

Responder
heli
Respuestas: 748
 Heli
(@heli)
Ardero
Registrado: hace 19 años

Hola, Qkiyo, como dice joviwap aunque existen las etiquetas en C y la función "goto" no es recomedable usarlas, es mejor intentar otra solución y dejar el goto para casos "de emergencia". Creo que yo solo he usado el goto en dos ocasiones, y llevo escritas varios miles de líneas de código en C.
Puedes usar un bucle infinito y dentro el "continue" que lo que queda de bucle y comienza desde el principio, el "break" que termina el bucle ya mismo pero continua con el resto de la funcion o el "return" que termina la funcion en ese punto.
Para el ejemplo que pones puedes hacerlo así:

funcion ()
{
while (1) // bucle infinito
{
if (condicion1){ /* hago algo aquí */}
if (condición2) { continue; /* salta al comienzo del bucle otra vez*/}
if (condicion3) {/* hago otra cosa aquí*/}
if (condicion4) {/* hago otra cosa más */}
if (condicion5) {break; /* termina el bucle y continua con la función */}
if (condicion6) {/* hago otra cosa aquí*/}
if (condicion7) {return; /* sale de la función ya mismo sin continuar */
}
/* continua la funcion haciendo cosas */
/* hace más cosas */
}

En cuanto a retornar varios valores NO es posible. Pero si usas punteros a variables es posible que una función modifique varios valores. También se puenen agrupar las variables en arrays o estructuras y pasar a la función el puntero a esas variables.


void funcion (int *d1, *d2, *d3)
{
*d1 = 5;
*d2 = 6;
*d3 = 7;
}
main ()
{
int dato1, dato2, dato3;

dato1=1;
dato2=2;
dato3=3;
/* hasta aquí está claro ¿no? */
función (&dato1, &dato2, &dato3);
/* he llamado a función y le he dicho donde están dato1, 2 y 3 */
/* mediante el símbolo & que indica "la dirección de" */
/* ahora dato1 = 5, dato2 = 6 y dato3 = 7 */
/* la función no ha retornado nada pero ha cambiado 3 variables */
/* pese a que son locales a main */
}


Cuando se familiariza uno con "punteros a" * y "direcciones de" & se consiguen cosas muy interesantes.

Responder
qkiyo
Respuestas: 106
Topic starter
(@qkiyo)
Estimable Member
Registrado: hace 18 años

Aahh vale, vale, ya lo habia visto en C++ pero ni me acordaba de como se hacia..ni para que servía * y & . Lo malo es lo de las etiquetas...se me va a complicar un poco la historia, xke no es cuestion se salir de la función..sino de saltar a una determinada linea, aki es donde veo una gran desventaja de C respecto del ensamblador..
Bueno, muchas gracias x dedicarm vuestro tiempo 😉 SaLu2!!

Responder
Página 1 / 3
Compartir: