[ Foro de C ]

Cómo manipular números en ficheros de texto Pág.93

21-Oct-2009 20:27
Jesús S.
2 Respuestas

¡Hola!

Voy algo más retrasado que Roberto rrs en el mismo ejercicio de la página 93.

Estoy tratando de crear el fichero, pero cuando lo voy a compilar me aparece el siguiente error:

Línea 81 [Warning] passing arg 1 of fputs makes pointer from integer without a cast.

Sé que mis males se arreglarían poniendo el teléfono como char, pero quiero saber cómo actuar en caso de números.

El S.O. es XP y el compilador DEV-C++.
He definido telefono en el struct ficha como unsigned int y char textemp[10]. El extraño símbolo ante ficha[i].telefono es el ampersand.

    .............................

              puts("Escribe la poblacion");
              gets(ficha[i].poblacion);
              fputs(ficha[i].poblacion,fichero);    
              fputs("\n",fichero);  
      
              puts("Escribe el telefono");
              gets(textemp);
              sscanf(textemp,"%ud",&ficha[i].telefono);
linea 81   fputs(ficha[i].telefono,fichero);
              fputs("\n",fichero);

    ...............................

¿Dónde está el error?

Saludos.         


22-Oct-2009 09:44
Jesús S.

¡Hola!

Me respondo yo mismo, por si a alguien le interesa saber la solución.

Tras muchas vueltas y pruebas, al final lo he conseguido poniendo:

       puts("Escribe la poblacion");
       gets(ficha[i].poblacion);
       fputs(ficha[i].poblacion,fichero);    
       fputs("\n",fichero);  
      
       printf("Escribe el telefono\n");
       gets(textemp);
       sscanf(textemp,"%10u",&ficha[i].telefono);
       fprintf(fichero,"%10u",ficha[i].telefono);
       fputs("\n",fichero);

Saludos.


23-Oct-2009 22:44
Nacho Cabanes (+84)

Así es. Si usas un dato numérico para el teléfono, no puedes guardar con "fputs" sino con "fprintf", porque no es una cadena.

Aun así, un consejo: para los teléfonos se suele preferir usar cadenas en vez de números, porque así te da el juego de poder usar espacios, paréntesis, ceros a la izquierda, etc.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)