Error el imprimir en fichero de 50.000 numeros

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
bboymen
Mensajes: 1
Registrado: 06/12/2019 12:34 am

Error el imprimir en fichero de 50.000 numeros

#1 Mensaje por bboymen » 06/12/2019 12:39 am

Buenos dias.

Estoy haciendo un programa para la asignatura de Algoritmia de diferentes algoritmos de ordenacion.

Me encuentro con el siguiente problema.

Leo un fichero de numeros, lo ordeno y por pantalla me los muestra bien, al imprimir a fichero si el fichero es pequeño me lo crea bien, ejemplo para 5 numeros. El problema es cuando le paso el fichero de 50.000 numeros, cuando imprime el fichero solo crea un fichero con un "1" y se acabo, sin embargo si le digo que muestre por pantalla 10-20-30 numeros me los muestra ordenados perfectamente.

He intentado varias formulas, con size of / size of... etc... pero esas, por ejemplo, solo muestra un 1 y un 0 e incluso el de tamaño 5 numeros solo muestra dos numeros.

Paso el codigo de imprimir a fichero, el ultimo que tengo que por lo menos un fichero mequeño si que lo imprime bien por si alguien me puede echar una mano. Gracias de antemano.

Código: Seleccionar todo

/*funcion para imprimir en un fichero*/
void imprimeFichero(long int array[]){	
             

	 FILE *fp;
	 char output[]="FicheroOrdenado.txt";
	 long int n=0;/*para recorrer cada casilla interna del array*/	
	  
	 	 	 
	 fp=fopen(output,"w");
	 
	 do{
	 	fprintf(fp,"%d\n",array[n]);
	 	n++;
	 	
	 }
	 while (array[n]!= NULL);/*recorremos el array hasta que encuente el \0 que es el caracter que indica que se ha terminado el array*/		 
  
	 fclose(fp);	  

}
Última edición por mollok el 07/12/2019 9:55 am, editado 1 vez en total.
Razón: Los códigos deben ir entre etiquetas 'code', botón </>

el pare
Mensajes: 10
Registrado: 04/12/2019 5:40 am

Re: Error el imprimir en fichero de 50.000 numeros

#2 Mensaje por el pare » 06/12/2019 7:54 am

Hola bboymen:

Quizas te diga la estupidez más grande que se puede decir por ser novato en esto.

Yo creo que lo que te puede pasar es que estas reservando demasiada memoria para el arreglo.

Creo que se arreglaría con

void imprimeFichero(unsigned int array){

Salu2.

mollok
Mensajes: 526
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Error el imprimir en fichero de 50.000 numeros

#3 Mensaje por mollok » 07/12/2019 10:39 am

No tienes las cosas muy claras con los arrays.

'\0' no es lo mismo que NULL, que tampoco es lo mismo que 0. Eso semánticamente, podría existir una máquina con un compilador que diera valores diferentes a esas constantes, salvo el 0, que siempre es 0.

NULL sirve para marcar que un puntero no apunta a ningún sitio, por tanto que mires si un miembro del array (de escalares) es NULL está mal.
En la mayoría de compiladores NULL es algo parecido a 0, por tanto tu bucle se parará cuándo encuentre un 0, aún siendo éste un valor válido.

La forma correcta, en C, de pasar como argumento un array es pasar también su valor:

Código: Seleccionar todo

void imprimeFichero(long int array[], size_t tam){
Para recorrer los elementos del array usarás un for:

Código: Seleccionar todo

for(int i=0; i<tam; ++i) {
    fprintf(fp,"%d\n",array[i]);
}
Por otra parte cuando vayas a poner una cadena en una variable y ésta no deba modificarse una un puntero:

Código: Seleccionar todo

char *output="FicheroOrdenado.txt";
La razón es que los arrays sí pueden modificarse, pero las cadenas literales no. Arrays y punteros son dos cosas totalmente distintas, aunque su acceso sea el mismo.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados