gpt4 book ai didi

c - C 中有很多错误, "redefinition"错误等等

转载 作者:行者123 更新时间:2023-11-30 20:54:01 27 4
gpt4 key购买 nike

我遇到了奇怪的错误,其中大多数涉及第 9-12 行(函数声明),但我找不到问题。请帮助我:) 谢谢

代码:

#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

最佳答案

移动结构定义,使其位于函数声明之前。另外,我的编译器不喜欢使用索引作为变量名,因为它是在 string.h 中定义的。

还给出了一些警告,您应该在函数调用中使用inout之前初始化它们以消除警告。您可以像这样 File *in = NULL, *out = NULL; 执行此操作,fgets 也需要一个 char* 但您传递了 L->num_books 这是一个 int

关于c - C 中有很多错误, "redefinition"错误等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43560311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com