费曼 发表于 2018-12-14 14:47:30

为什么这个编译不通过呢?找不出错误?希望帮帮忙

为什么这个编译不通过呢?找不出错误?希望帮帮忙

风过无痕丶 发表于 2018-12-14 16:16:07

贴代码

TyCk 发表于 2018-12-14 19:41:59

本帖最后由 TyCk 于 2018-12-14 19:44 编辑

第三行和第十九行对ReadBook的声明存在冲突,参数书写有问题。
试着修改一下*的位置,感觉有点问题。
另外,尝试修改下Book结构体声明的语句的位置,放在第三行前面呢?{:10_335:}

费曼 发表于 2018-12-14 20:09:28

#include<stdio.h>

void ReadBook(struct Book *);
void PrintBook(struct Book *);
struct Date
{
        int year;
        int month;
        int day
};
struct Book
{
        char title;
        char author;
        float price;
        struct Date date;
        char publisher
};
void ReadBook(struct Book *book)
{
        printf("请输入书名:");
        scanf("%s",book->title);
        printf("请输入作者:");
        scanf("%s",book->author);
        printf("请输入售价:");
        scanf("%.2f",&book->price);
        printf("请输入出版日期:");
        scanf("%d-%d-%d",&book->Date.year,&book->Date.month,&book->Date.day);
        printf("请输入出版社:");
        scanf("%s",book->publisher);
}
void PrintBook(struct Book *book)
{
        printf("书名:%s\n",book->title);
        printf("作者:%s\n",book->author);
        printf("售价:%.2f\n",book->price);
        printf("出版日期:%d-%d-%d\n",book->Date.year,book->Date.month,book->Date.day);
        printf("出版社:%s\n",book->publisher);
}
int main()
{
        int N,i;
        printf("欢迎光临图书馆!\n");
        printf("请输入需录入图书数:\n");
        scanf("%d",&N);
        putchar('\n');
        struct Book book;
        struct Book*pbook
        for(i=0;i<N;i++)
        {
                pbook=&book;
        }
        for(i=0;i<N;i++)
        {
                printf("请录入第%d本图书信息....\n",i+);
                ReadBook(pbook);
        }
        putchar('\n');
        printf("图书信息录入完毕,现在开始打印验证....\n");
        for(i=0;i<N;i++)
        {
                printf("打印第%d本图书信息\n",i+);
                PrintfBook(pbook);
        }
        putchar('\n');
        printf("===打印完毕===\n");
       
       
       
        return 0;
}

百里狂生 发表于 2018-12-14 21:23:12

第9行,第17行:缺少 ; 结尾。
第28行,第37行:Date.year 错误,应该是date.year 。。。。
第47行,第48行(struct Book book;struct Book*pbook):c语言不支持动态分配数组。后面还缺少 ;
55行:i+??i ......
第62行:i+??i ......   中文 ;应该改成英文 ;
63行: PrintfBook(pbook); ==>PrintBook(pbook);

lemon3 发表于 2018-12-14 21:50:26

我当时看视频和题主有同样的问题,大概率视频那个代码写的有问题吧,毕竟他用的Linux

费曼 发表于 2018-12-14 21:56:51

百里狂生 发表于 2018-12-14 21:23
第9行,第17行:缺少 ; 结尾。
第28行,第37行:Date.year 错误,应该是date.year 。。。。
第47行,第48 ...

照着改了,但还是报错,动态分配数组好像是可行的
#include<stdio.h>

void ReadBook(struct Book *);
void PrintBook(struct Book *);
struct Date
{
        int year;
        int month;
        int day;
};
struct Book
{
        char title;
        char author;
        float price;
        struct Date date;
        char publisher;
};
void ReadBook(struct Book *book)
{
        printf("请输入书名:");
        scanf("%s",book->title);
        printf("请输入作者:");
        scanf("%s",book->author);
        printf("请输入售价:");
        scanf("%.2f",&book->price);
        printf("请输入出版日期:");
        scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
        printf("请输入出版社:");
        scanf("%s",book->publisher);
}
void PrintBook(struct Book *book)
{
        printf("书名:%s\n",book->title);
        printf("作者:%s\n",book->author);
        printf("售价:%.2f\n",book->price);
        printf("出版日期:%d-%d-%d\n",book->Date.year,book->Date.month,book->Date.day);
        printf("出版社:%s\n",book->publisher);
}
int main()
{
        int N,i;
        printf("欢迎光临图书馆!\n");
        printf("请输入需录入图书数:\n");
        scanf("%d",&N);
        putchar('\n');
        struct Book book;
        struct Book*pbook;
        for(i=0;i<N;i++)
        {
                pbook=&book;
        }
        for(i=0;i<N;i++)
        {
                printf("请录入第%d本图书信息....\n",i+1);
                ReadBook(pbook);
        }
        putchar('\n');
        printf("图书信息录入完毕,现在开始打印验证....\n");
        for(i=0;i<N;i++)
        {
                printf("打印第%d本图书信息\n",i+);
                PrintBook(pbook);
        }
        putchar('\n');
        printf("===打印完毕===\n");
       
       
       
        return 0;
}

百里狂生 发表于 2018-12-15 12:17:57

我帮你改了一下

#include<stdio.h>

void ReadBook(struct Book *);
void PrintBook(struct Book *);
struct Date
{
        int year;
        int month;
        int day;
};
struct Book
{
        char title;
        char author;
        float price;
        struct Date date;
        char publisher;
};
void ReadBook(struct Book *book)
{
        printf("请输入书名:");
        scanf("%s", book->title);
        printf("请输入作者:");
        scanf("%s", book->author);
        printf("请输入售价:");
        scanf("%f", &book->price);
        printf("请输入出版日期:");
        scanf("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day);
        printf("请输入出版社:");
        scanf("%s", book->publisher);
}
void PrintBook(struct Book book)
{
        printf("书名:%s\n", book.title);
        printf("作者:%s\n", book.author);
        printf("售价:%.2f\n", book.price);
        printf("出版日期:%d-%d-%d\n", book.date.year, book.date.month, book.date.day);
        printf("出版社:%s\n", book.publisher);
}
int main()
{
        int N, i;
        printf("欢迎光临图书馆!\n");
        printf("请输入需录入图书数:\n");

        scanf("%d", &N);
        putchar('\n');
        struct Book *pbook = (struct Book*)malloc(N * sizeof(struct Book));//在堆上动态分配内存
        for (i = 0; i<N; i++)
        {
                printf("请录入第%d本图书信息....\n", i );
                ReadBook(&pbook);
        }
        putchar('\n');
        printf("图书信息录入完毕,现在开始打印验证....\n");
        for (i = 0; i<N; i++)
        {
                printf("打印第%d本图书信息\n", i );
                        PrintBook(pbook);
        }
        putchar('\n');
        printf("===打印完毕===\n");
        return 0;
}

jxs1983 发表于 2018-12-15 14:23:57

第三行和第十九行对ReadBook的声明存在冲突,参数书写有问题。
试着修改一下*的位置,感觉有点问题。

费曼 发表于 2018-12-15 17:20:31

百里狂生 发表于 2018-12-15 12:17
我帮你改了一下

也报错,而且第52行不用&吧

费曼 发表于 2018-12-15 17:38:54

我知道了,结构体声明在函数之前才对
页: [1]
查看完整版本: 为什么这个编译不通过呢?找不出错误?希望帮帮忙