Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - ſeptiembre 08, 2008, 04:44:13
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Mejor opcion 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Mejor opcion  (Leído 96 veces)
lann
Habitual
*****
Desconectado Desconectado

Mensajes: 309


maamamma

migue1990@gmail.com
Ver Perfil Email
« en: Junio 04, 2008, 03:27:15 »

tengo duda que es mas eficiente, practico, etc. (mejor)  y por que (tecnicamente)? aunque pienso que la primero opcion pues no se por que, dando una explicacion tecnica...

    int counter = 0;
    do
    {
        hIntc[ counter++ ] = getchar();
    }while( ( counter < 40 ) && ( hIntc[ counter - 1 ] != '\n' ) );

o

    int counter = 0;
    char tmpC;
    while( ( ( tmpC = getchar() ) != '\n' ) && ( counter < 40 ) )
    {
        hIntc[ counter++ ] = tmpC;
    }
« Última modificación: Junio 04, 2008, 03:29:52 por lann » En línea

am
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #1 en: Junio 04, 2008, 10:34:16 »

Buenas

No es que necesariamente un bucle sea mejor que el otro. La diferencia es que el do-while siempre se ejecuta al menos 1 vez, con lo que el do-while podria llegar a ejecutarse n veces, mientras que el while() se ejecutaria solo n-1 veces.

Entonces para usar el codigo que dejaste, si getchar() te devuelve un '\n' la primera vez que pasa por los bucles, con el do-while() counter te queda en 1, y con el while() te queda en 0.

Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

DarkIker
Habitual
*****
Desconectado Desconectado

Mensajes: 263


Colombia Underground Team

dark_iker_reign@hotmail.com
Ver Perfil WWW Email
« Respuesta #2 en: Junio 05, 2008, 12:08:24 »

si se puede modificar el code pospreferiria por la razon de que fread me mola y de que los index tambien, aunque la cosa hubiera quedaod mas pro con apuntadores( y mas rapida ) pero digamoslo asi el costo de memoria hubiera sido mayor:

Código:
char szCad[MAX_SIZE + 1];
int iAt = 0;

     memset( szCad, 0x00, MAX_SIZE + 1);

     do {
           fread( &szCad[iAt], 1, 1, stdin);
     } while (iAt < MAX_SIZE && szCad[iAt++] != '\n');

     szCad[iAt - 1] = 0;

esa ultima linea para correjir el echo que el salto de linea no debe de quedar en la cadena o eso vi en el segundo code de lann. Salu2.

Att: DarkIker

En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion --> Colombia Underground Team

Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion --> My Blog
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Mejor opcion « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC