2016-06-20 3 views
0

Я пытаюсь написать небольшую программу базы данных, которая будет иметь 5 функций, то первый из них Add(), но я получаю ошибку Segfault на зсапЕ:Segfault зсапЕ и 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 ?? ??() (??:??) 

Кроме того, я заметил, что если я пишу fgets после инструкции Scanf, fgets не будет выполняться для некоторых причины ... Итак, в прототипе мне пришлось сохранить этот порядок: char char int (например, я не мог писать: char int char)

ответ

0

Решенный, я пытался распечатать int напрямую, я должен был использовать:

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

забыл% D

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