2017-04-22 69 views
-3

我得到了奇怪的錯誤,其中大部分是指第9-12行(函數decalartions),我無法找到問題。請幫我:)謝謝很多C錯誤,「重新定義」錯誤和更多

代碼:

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#define MAX 256 


void Get_Lost(char* str); 
void input_book(Book* B, FILE *in); 
void input_library(Library *L, FILE *in); 
void output_book(Book* B, FILE *out); 
void output_library(Library* L, FILE *out); 


typedef struct Book 
{ 
    char book_code[10]; 
    char *book_name; 
}Book; 

typedef struct Library 
{ 
    char library_name[MAX]; 
    int num_books; 
    Book *B; 
}Library; 

int index = 0;//global variable to check the number of 'enters' n the input book function 

int main() 
{ 
    FILE *in, *out; 
    Library Libr; 
    input_library(&Libr, in); 
    fclose(in); 
    output_library(&Libr, out); 
    fclose(out); 
    //for (i = 0; i<Libr.num_books; i++) 
    return 0; 
} 

void input_book(Book* B, FILE *in) 
{ 
    int counter = 0; //counts the number of enters (\n) to identify the book_code and book_name 
    char temp_book_name[MAX]; 
    in = fopen("input.txt", "rt"); 
    if (in == NULL) 
    { 
     Get_Lost("File not found"); 
    } 

    while (counter < 2 + index) 
    { 

     if (getc(in) == '\n') 
      counter++; 
     in++; 
    } 
    index++; //increasing the index for the next line 
    fgets(B->book_code, MAX, in); //put the book code in the structure 
    fgets(temp_book_name, MAX, in);//puts the book name in temprary var, in order to allocate memory dynamically afterwards 
    B->book_name = (char *)malloc(strlen(temp_book_name) * sizeof(char));/*dynamic allocation of memory 
                     for the book name using temp var*/ 
    if (B->book_name == NULL) 
    { 
     Get_Lost("No memory"); 
    } 
    B->book_name = temp_book_name; 
    fclose(in); 
} 

void input_library(Library *L, FILE *in) 
{ 
    int j; 
    Book B; 
    in = fopen("input.txt", "rt"); 
    if (in == NULL) 
    { 
     Get_Lost("File not found"); 
    } 
    fgets(L->library_name, MAX, in); 
    fgets(L->num_books, MAX, in); 
    L->B = (Book *)malloc(L->num_books * sizeof(Book));//dynamic allocation for the array of books in the library 
    for (j = 0; j < L->num_books; j++) 
    { 
     input_book(&L->B[j], in);//calling the input_book function 'num_books' times to fill all the Books 
    } 
    fclose(in); 
} 

void output_book(Book* B, FILE *out) 
{ 
    out = fopen("input.txt", "wt"); 
    if (out == NULL) 
    { 
     Get_Lost("File not found"); 
    } 
    fprintf(out, "%s ", B->book_code); 
    fprintf(out, "%s\n", B->book_name); 
    fclose(out); 
} 

void output_library(Library* L, FILE *out) 
{ 
    int k; 
    Book B; 
    out = fopen("input.txt", "wt"); 
    if (out == NULL) 
    { 
     Get_Lost("File not found"); 
    } 

    fprintf(out, "%s\n", L->library_name); 
    for (k = 0; k < L->num_books; k++) 
    { 
     output_book(&L->B[k], out);//calling the output_book function 'num_books' times to print the books' details 
    } 
    fclose(out); 
} 

void Get_Lost(char* str) 
{ 
    printf("\n%s", str); 
    exit(1); 
} 

錯誤:

C2059: syntax error : ')' LINE 9 
Error 10 error C2059: syntax error : ')'  LINE 10 
Error 15 error C2059: syntax error : ')'  LINE 11 
Error 20 error C2059: syntax error : ')'  LINE 12 
Error 1 error C2143: syntax error : missing ')' before '*'  LINE 9  
Error 6 error C2143: syntax error : missing ')' before '*'  LINE 10  
Error 11 error C2143: syntax error : missing ')' before '*'  LINE 11  
Error 16 error C2143: syntax error : missing ')' before '*'  LINE 12  
Error 4 error C2143: syntax error : missing ';' before '*'  LINE 9  
Error 9 error C2143: syntax error : missing ';' before '*' LINE 10   
Error 14 error C2143: syntax error : missing ';' before '*'  LINE 11  
Error 19 error C2143: syntax error : missing ';' before '*'  LINE 12 
Error 2 error C2143: syntax error : missing '{' before '*'  LINE 9  
Error 7 error C2143: syntax error : missing '{' before '*' LINE 10 
Error 12 error C2143: syntax error : missing '{' before '*'  LINE 11  
Error 17 error C2143: syntax error : missing '{' before '*'  LINE 12  
C2371: 'FILE' : redefinition; different basic types LINE 9 
C2371: 'FILE' : redefinition; different basic types LINE 10  
C2371: 'FILE' : redefinition; different basic types LINE 11 
C2371: 'FILE' : redefinition; different basic types LINE 12 
C2371: 'input_library' : redefinition; different basic types  LINE 73 
C2371: 'output_library' : redefinition; different basic types LINE 105 
+3

你需要在你的函數原型中使用它們之前聲明你的結構體 –

+0

你認爲這個'fgets(L-> num_books,MAX,in);'會做什麼? –

+0

該死的,忘記了結構被聲明爲befors函數.. –

回答

2

移動你的結構定義,以便他們是你的函數聲明之前。此外,我的編譯器不喜歡使用索引作爲變量名稱,因爲它在string.h中定義。

還給出了幾個警告,您應該初始化inout,然後在您的函數調用中使用它們以消除警告。你可以這樣做File *in = NULL, *out = NULL;,也fgets預計char*,但你通過L->num_books這是一個int

+0

將它改爲'i',現在theres第34行運行時錯誤,當我打電話的第一個功能.. –

+0

@Ido我不能重現該錯誤 – nitronoid

+0

好吧,我改變了有問題的fgets fscanf。仍然不能理解「in」和「out」的問題。我認爲我宣佈他們在主要的乞討 –