| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
ups!!
Registrado: 02 Sep 2007 Mensajes: 8
| Publicado: 04/10/2007 9:50 pm | | | Título: archivo en c |
| tengo que construir un programa que genere las predicciones para los doce signos zodiacales y tengo el siguiente codigo:
#include <stdio.h> #include <time.h> #include <stdlib.h>
#define P 300 #define Q 50 #define A 200
main(){
FILE *f_in,*oar,*m,*f_out; char color[P], prediccion[P], signo[P]; int cont[A], cont1[Q]; int i, ran, aux, j, y, num;
time_t tiempo; time(&tiempo); srand(tiempo);
for(i=0; i<A; i++){ cont[i]=i; y=i; } for(i=0; i<Q; i++){ cont1[i]=i; j=i; }
f_in=fopen("signos.txt", "r"); f_out=fopen("horoscopo.txt", "w");
while(fgets(signo,P,f_in)!='\0'){ fputs(signo,f_out);
m=fopen("predicciones.txt", "r"); ran=rand()%y; aux=cont[ran]; cont[ran]=cont[y];
y--; i=0;
while(fgets(prediccion,P,m)!=NULL){ //a esta sentencia no entra if(i==cont) fputs(prediccion,f_out);
i++; } fclose(m);
oar=fopen("color.txt", "r"); ran=rand()%j; aux=cont[ran]; cont[ran]=cont[j]; j--; i=0; while(fgets(color,P,oar)!=NULL){// a esta sentencia no entra if(i==aux){ fputs(oar,f_out); i++; }
}
fclose(oar);
num=rand()%100+1; fprintf(f_out,"Numero %d\n", num);
fputs("\n", f_out);
}
fclose(f_out); system("pause"); }
pero no se que pasa que no me entra a dos de los while, lo que provoca que no imprima los colores y las predicciones. me podrian ayudar |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3588 Ubicación: Mexico
| Publicado: 05/10/2007 7:59 am | | | Título: |
| En el programa no es necesario declarar una variable de tipo time_t solo para pasarla a la funcion srand:
| Código: | time_t tiempo; time(&tiempo); srand(tiempo); |
En su lugar es mejor utilizar directamente el valor de retorno de la funcion time utilizando NULL como argumento:
| Código: | srand((unsigned) time(NULL)) |
En estos dos bucles las asignaciones a las variables "y" y "j" en cada iteracion:
| Código: | for (i = 0; i < A; i++) { cont[i] = i; y = i; } for (i = 0; i < Q; i++) { cont1[i] = i; j = i; } |
Son innecesarias ya que su valor final se puede calcular antes de la ejecucion de los bucles, para el caso es mejor:
| Código: | for (i = 0; i < A; i++) cont[i] = i; y = i - 1; /* O tambien "y = A - 1" */
for (i = 0; i < Q; i++) cont1[i] = i; j = i - 1; /* O tambien "j = Q - 1" */ |
Por cierto el objetivo principal de las constantes simbolicas:
| Código: | #define P 300 #define Q 50 #define A 200 |
Es el uso de nombres claros y descriptivos, si vas a utilizar nombres como x, y, z (o incluso FOO, BAR, FOOZLE) mejor utiliza los valores directamente.
El archivo de entrada lo abres pero no lo cierras mediante fclose.
El primer error importante no es el bucle while sino la condicion en el if:
La variable "i" es de tipo "int" meintras que "cont" es un array de enteros (o "int []").
El segundo error importante se encuentra inmediatamente, en la llamada a fputs:
| Código: | fputs(oar, f_out); |
Aqui tanto "oar" (bonito nombre) como "f_out" son variables de tipo "FILE *" lo que no es correcto ya que fputs espera dos argumentos, el primero de tipo "const char *" y el segundo de tipo "FILE *".
Por ultimo te recomendaria publicar el codigo fuente de tus programas utilizando la etiqueta "code" y tambien trata de darle a las constantes y variables de tus programas nombres tan claros y descriptivos como sea posible.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |