sustituir scanf

Iniciado por m@o_614, 12 Octubre 2013, 04:29 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos

ya le puse que me escribiera con los fwrite, uno para cada campo porque no queria escribir bytes de mas, pero en el segundo fwrite() no me imprime el numero correcto, no se si es porque fwrite el primer argumento tiene que ser una cadena o arreglo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
/*
   Crear un "struct" que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia.
   Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado "gente.dat", cerrar el fichero,
   volverlo a abrir para lectura y mostrar los datos que se habían guardado.
*/
typedef struct datos
{
    char nombre[MAX];
    int edad;
    char ciudad_residencia[MAX];
}Persona;

void entrada(Persona *p);
void mostrar(FILE *ap);

int main()
{
    FILE *fd,*ap;
    Persona p;
    if((fd = fopen("F:\\gente.txt","w"))!= NULL)
    {
        entrada(&p);
        fwrite(p.nombre,sizeof(char),strlen(p.nombre),fd);
        fwrite(&p.edad,sizeof(int),1,fd);
        fwrite(p.ciudad_residencia,sizeof(char),strlen(p.ciudad_residencia),fd);
        fclose(fd);
        if((ap = fopen("F:\\gente.txt","r"))!= NULL);
           mostrar(ap);
    }
    else
       printf("No se pudo crear archivo");
    return 0;
}

void entrada(Persona *p)
{
    char cad[10];
    printf("Dame nombre:\n");
    fgets(p->nombre,MAX,stdin);
    printf("Dame edad:\n");
    fgets(cad,10,stdin);
    sscanf(cad,"%d",&p->edad);
    printf("Dame ciudad de residencia:\n");
    fgets(p->ciudad_residencia,MAX,stdin);
    system("cls");
}

void mostrar(FILE *ap)
{
    int car;
    while((car = fgetc(ap))!= EOF)
       printf("%c",car);
}


disculpa que haga tantas preguntas, pero es que apenas estoy empezando a familiarizarme con archivos, gracias

Eternal Idol

Revisa la documentacion de todas las funciones que usas, especilamente fopen. No podes esperar que printf("%c",car); funcione, escribiste un int con la dead, no un caracter.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón