2016-06-20 3 views
0

내가 5 개 기능을해야합니다 작은 데이터베이스 프로그램을 작성하기 위해 노력하고있어는, 첫 번째는 (추가입니다)하지만 난 scanf와에 segfault의 오류 :이 오류입니다는 segfault의 scanf와 fprintf와

 

    void Add(); 

    struct data{ 
     char name[20]; 
     char description[300]; 
     int quantity; 
    }; 

    typedef struct data dataobj; 

    dataobj element; 

    int main() 
    { 
     Add(); 

     return 0; 

    } 

    Add() { 

     FILE *database; 
     database = fopen("database.txt", "a+"); 

     printf("Object: \n"); 
     fgets(element.name,20,stdin); 
     fprintf(database, element.name); 

     printf("Description: \n"); 
     fgets(element.description,300,stdin); 
     fprintf(database, element.description); 

     printf("Quantity: \n"); 
     scanf("%d",&element.quantity); 
     fprintf(database, element.quantity); 

     fclose(database); 
    } 


: 프로그램 수신 신호 SIGSEGV, 세그먼트 오류.) (ungetwc에서 (C : \ WINDOWS \ SysWOW64와 \ MSVCRT.DLL)

디버거 창

 

    #0 0x77bea965 ungetwc() (C:\WINDOWS\SysWOW64\msvcrt.dll:??) 
    #1 0x77c21268 msvcrt!_iob() (C:\WINDOWS\SysWOW64\msvcrt.dll:??) 
    #2 ?? ??() (??:??) 

이 또한 내가 scanf와 명령 후에는 fgets를 작성하는 경우는 fgets가 일부 실행되지 않습니다 것으로 나타났습니다 이유 .. 그래서 프로토 타입에서 나는이 순서를 유지해야했다 : char char int (예를 들어 내가 쓸 수 없었다 : char int char)

답변

0

해결했습니다. int를 직접 인쇄하려고했는데, 사용 했어야합니다 :

printf("Quantity: \n"); 
    scanf("%d",&element.quantity); 
    fprintf(database,"%d",element.quantity); 

0은 % D 잊고