Programación General > C/C++

 Juego de palabras

(1/2) > >>

badyalberto:

--- Código: C++ --- #include<stdio.h>#include<stdlib.h>#include<time.h> #define LONGITUD 50#define TEMPS 60#define TOP 5 char *paraules[]={"llibre","mantega","carrer","pernil","pilota"}; char top_noms[TOP][LONGITUD];int top_punts[TOP]; int main(){    int i,n,num;    int encerts;       char resposta[LONGITUD];    time_t t;        srand(time(NULL));    for(i=0;i<TOP;i++)        top_punts[i]=-1;    n=sizeof(paraules)/sizeof(char*);    do    {         printf("nnEntra les paraules que van sortintn");         t=time(NULL);         while(difftime(time(NULL),t)<TEMPS)         {               num=rand()%num;               puts(paraules[num]);               gets(resposta);               if(strcmp(resposta,paraules[num])==0)               {                    if(difftime(time(NULL),t)<TEMPS)                    {                         encerts++;                         puts("OKn");                    }                    else                        puts("Fora de Tempsn");               }               else                   puts("Errorn");         }         printf("Continuar(si/no)?n");         gets(resposta);    }while(strcmp(resposta,"si")==0);    getchar();getchar();}  
Alguien sabe pq al ejecutarlo se me cierra.
Este codigo no lo e hecho yo, sino que lo colgado la profe y nosotros tenemos q añadirle dos funciones: una crea el ranking, la otra lo printa.-

Eternal Idol:
No se ni como lo compilas tal y como esta ahi ... para usar strcmp necesitas incluir string.h.

Se cierra al dar una excepcion, el VC++ ya advierte de algo raro en esta linea al estar usando una variable sin inicializar:
num=rand()%num;

El problema es que num se usa inmediatamente despues en:
puts(paraules[num]);

¿Que pasa si num era 4500 y rand devuelve 123456? Que num es 1956 ... ¿Y si inicializamos num a 0?  :blink:

Asi que mejor limitarlo al numero de palabras existentes:
num = rand() % (sizeof(paraules) / sizeof(paraules[0]));

Fijate que encerts es incrementado sin ser inicializado con lo cual arranca con vaya uno a saber que valor ...

PD. O este codigo esta hecho mal adrede o la profesora sabe tanto de programacion como yo de corte y confeccion.

gonza_fs:
Que tal. Mira, si la solucion anterior que te dieron no resulta, el error esta dentro del do-while o dentro del segundo while. Supongo por como lo enunciaste, que el programa se te cierra solo sin advertencias ni nada. Si es asi, lo que esta pasando es que la pila de ejecucion se llena al ejecutar un bucle que no corta, y simplemente se sale. El problema puede ser tambien, debido al compilador usado. Por ahi a vos te pasa eso y en otro compilador distinto funciona. Habria que saber como maneja tu compilador el tratado de los string. Yo usando dev y builder tuve varios de estos problemas con caracteres. Espero te sirva, suerte.

Eternal Idol:
gonza_fs: la pila no aumenta en cada pasada, no es una funcion recursiva ...

gonza_fs:
Quien dijo que la pila se llena solo con recursion? la pila se llena con toda la informacion de un programa. La recursion solo hace que se llene mas rapido, pero eso no significa que si no hay recursion la pila no se llene. Esto tambien depende de como administra la memoria el compilador, variables globales, estaticas, etc. La cosa es que no es solo cuestion de tirar codigo sin pensar en lo que pasa con la memoria. Por eso este tipo de problemas y otros relacionados.
Igual, lo que dije quiza no es la solucion al problema, pero solo contesto a algo que quiza no tuviste en cuenta. Saludos.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa