2015-07-21 45 views
1

我必須輸入數據到一個FILE *(這是在C和使用代碼塊),數據是一個包含3個字符[]一個1雙結構,我不知道爲什麼當我打印該文件是重複過去的結構兩次,「DNI」它把0FILE中的數據輸入

#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); 

當你進入這裏0aux=carga_struct(aux)通過fwrite其寫入到磁盤上檢查此聲明之前的下一行:while(strcmp(aux.dni,"0")!=0)

+0

將其更改爲此效果更好,但仍然重複最後的 aux = carga_struct(aux); while(strcmp(aux.dni,「0」)!= 0) { fwrite &aux,sizeof(t_datos),1,ptrarch); aux = carga_struct(aux) } –