|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
可以运行,但在录入书本信息时就错误了,请问是为什么?
#include<stdio.h>
#include<stdlib.h>
struct Date{
int year;
int month;
int day;
};
struct Book {
char title[30];
char author[30];
int price;
struct Date date;
char publisher[30];
}library[10];
void getInput(struct Book *b)
{
printf("title:");
scanf_s("%s",(*b).title);
printf("\nauthor:");
scanf_s("%s",(*b).author);
printf("\nprice:");
scanf_s("%d",&(*b).price);
printf("\ndate:");
scanf_s("%d%d%d",(*b).date.year,(*b).date.month,(*b).date.day);
printf("\npublisher:");
scanf_s("%s",(*b).publisher);
}
void outPut(struct Book *b)
{
int i;
for(i=0;b+i!=NULL;i++)
{
printf("NO.%d\n",b+1+i);
printf("title:%s\n",(b+i)->title);
printf("author:%s\n",(b+i)->author);
printf("price:%d\n",(b+i)->price);
printf("date:%d.%d.%d\n",(b+i)->date.year,(b+i)->date.month,(b+i)->date.day);
printf("publisher:%s\n",(b+i)->publisher);
printf("\n==========next=========\n");
}
}
void main()
{
int i,n;
struct Book *b;
b = library;
printf("书本数:");
scanf_s("%d",&n);
for(i=0;i<n;i++)
{
b++;
printf("第%d本书数据:\n",i+1);
getInput(b);
printf("\n===========本书录入完毕=========\n");
}
outPut(b);
}
错误不少
1、scanf_s需要三个参数,第三个参数是输入的字符数,这个参数是必须的。scanf_s是要比scanf安全,但是使用限制也要多一些,必须要设定读取长度,
2、在getInput中,scanf_s读取日期的时候没有加 &,你所定义的日期架构提中的三个成员都是int
3、主函数for循环中,b++ 应该放在getInput之后,你需要先输入一本书,然后再向后移动指针
4、for循环结束后,outPut之前需要把指针b复位 b = library;,因为for循环结束时,指针b已经到了数组的末尾了,
5、outPut中的for循环条件b+i!=NULL,在不同的编译器下好像不太一样,我这里运行没通过,你试试在你那里能否通过。
|
|