结构体录入信息
可以运行,但在录入书本信息时就错误了,请问是为什么?#include<stdio.h>
#include<stdlib.h>
struct Date{
int year;
int month;
int day;
};
struct Book {
char title;
char author;
int price;
struct Date date;
char publisher;
}library;
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,在不同的编译器下好像不太一样,我这里运行没通过,你试试在你那里能否通过。 sunrise085 发表于 2020-3-25 09:23
错误不少
1、scanf_s需要三个参数,第三个参数是输入的字符数,这个参数是必须的。scanf_s是要比scanf安全 ...
我改了之后还是不行,都只运行到第一本书的title就没办法了,我电脑vs2012只能用scanf_s。 sunrise085 发表于 2020-3-25 09:23
错误不少
1、scanf_s需要三个参数,第三个参数是输入的字符数,这个参数是必须的。scanf_s是要比scanf安全 ...
新建工程后可以啦,谢谢!
页:
[1]