在FILE中输入数据

时间:2015-07-21 15:17:23

标签: c codeblocks

我必须将数据输入到FILE *(这是在C中并使用代码块),数据是包含3个char []和1个double的结构,我不知道为什么当我打印文件时它会重复最后一个结构两次,在" dni"它放0。

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char dni[9];
    char nombre[100], apellido[100];
    double monto_adeudado;
} t_datos;

void carga_del_archivo(char[]);
t_datos carga_struct(t_datos);

int main()
{
    char nombrearchivo[30];
    printf("ingrese el nombre del archivo: ");
    gets(nombrearchivo);
    carga_del_archivo(nombrearchivo);
    return 0;
}

void carga_del_archivo(char nombre[30])
{
    FILE* ptrarch;
    t_datos aux;
    ptrarch = fopen(nombre, "ab");
    if (ptrarch != NULL) {
        do {
            aux = carga_struct(aux);
            fwrite(&aux, sizeof(t_datos), 1, ptrarch);
        } while (strcmp(aux.dni, "0") != 0);
    } else {
        printf("ERROR\n");
    }
}

t_datos carga_struct(t_datos aux)
{
    printf("\ningrese el dni: ");
    fflush(stdin);
    gets(aux.dni);
    if (strcmp(aux.dni, "0") == 0)
        return aux;
    printf("\ningrese el nombre: ");
    fflush(stdin);
    gets(aux.nombre);
    fflush(stdin);
    printf("\ningrese el apellido: ");
    gets(aux.apellido);
    fflush(stdin);
    printf("\ningrese el monto adeudado: ");
    scanf("%lf", &aux.monto_adeudado);
    return aux;
}

1 个答案:

答案 0 :(得分:1)

问题出在这里:

       {
        aux=carga_struct(aux);
        fwrite(&aux,sizeof(t_datos),1,ptrarch);
       }while(strcmp(aux.dni,"0")!=0);

当您在此处输入0 aux=carga_struct(aux)时,请在下一行fwrite之前将其写入磁盘:while(strcmp(aux.dni,"0")!=0)