2015-07-21 2 views
1

Мне нужно ввести данные в FILE * (это в C и с помощью кодовых блоков), данные представляют собой структуру, содержащую 3 символа [] и 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; 
} 
+0

'gets()' -> 'fgets()'. –

+0

удалить 'fflush (stdin);' –

+0

с 'fflush (stdin);' вызывает неопределенное поведение. –

ответ

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).

+0

изменил его на это, работает лучше, но по-прежнему повторяет последний Окс = carga_struct (AUX); время (STRCMP (aux.dni, "0") = 0) { FWRITE (! & aux, sizeof (t_datos), 1, ptrarch); aux = carga_struct (aux) } –

Смежные вопросы