C中有很多错误,“重新定义”错误等等

时间:2017-04-22 14:23:54

标签: c error-handling

我得到了奇怪的错误,其中大多数是指第9-12行(函数decalartions),我无法找到问题所在。请帮帮我:)谢谢

代码:

#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

1 个答案:

答案 0 :(得分:2)

移动结构定义,使它们位于函数声明之前。我的编译器也不喜欢将index用作变量名,因为它在string.h中定义。

还会给出几个警告,您应该在函数调用中使用它们之前初始化inout以使警告静音。您可以这样做File *in = NULL, *out = NULL;fgets也需要char*,但您传递的L->num_booksint