在使用指针值得注意的是对结构体指针的使用:
例如:
struct BookMessage
{
char name[20];
int ID;
char author[20];
char press[20];
int price;
};
定义一个指针参数的结构体
void ImportMssage(BookMessage *pBook){}
那么如何用该指针输出该信息呢?
pBook->name VS pBook->ID?
其实pBook->name指向的是数组的名字,即首地址;
pBook->ID指向的是ID的地址而非值。
所以函数如下:
void ImportMssage(BookMessage *pBook)
{
printf("请输入书名:");
fflush(stdin);
scanf_s("%s", pBook->name,20);
printf("\n请输入作者:");
fflush(stdin);
scanf_s("%s", pBook->author, 20);
printf("\n请输入出版社:");
fflush(stdin);
scanf_s("%s", pBook->press, 20);
printf("\n请输入ID:");
fflush(stdin);
scanf_s("%d", &pBook->ID,4);
printf("\n请输入价格:");
fflush(stdin);
scanf_s("%d", &pBook->price,4);
}
&的优先级低于->
scanf()在vs2013里报错,编译器提示要用scanf_s代替;
scanf_s()参数与scanf()不同;
例如scanf(“%s”,&name,n),整形n为name类型的大小,如果name是数组,那n就是该数组的大小,即占的空间。
随带附上本次发现错误时写的工程:一个书库信息输入与打印信息的代码:环境—vs2013
main.c
#include "book.h"
int main(void)
{
Book book[2];
int i = 0,max_price = 0;
printf("/*******************待统计%d本**********************/\n", sizeof(book) / sizeof(Book));
while (i < sizeof(book) / sizeof(Book))
{
printf("统计第%d本",i+1);
ImportMssage(&book[i++]);
}
printf("/*******************全部书籍************************/\n");
PrintAllMssage(book, sizeof(book) / sizeof(Book));
max_price = MaxPrice(book, sizeof(book) / sizeof(Book));
printf("\n******************最大价格第%d本*******************/\n",max_price+1);
PrintMssage(book[max_price]);
system("pause");
return 0;
}
book.c
#include "book.h"
/************************************
function:显示字符数组元素
parameter:arr--数组,len--数组大小
return:void
date:2019-12-3
author:残梦
************************************/
void ArrayPrintChar(char p[], int len)
{
int i = 0;
printf("数组的大小为%d 元素值为:", len);
while (i < len)
{
printf("%c", p[i++]);
}
putchar('\n');
}
/************************************
function:输入单本书籍信息
parameter:pBook--BookMessage型指针
return:void
date:2019-12-3
author:残梦
************************************/
void ImportMssage(BookMessage *pBook)
{
printf("请输入书名:");
fflush(stdin);
scanf_s("%s", pBook->name,20);
printf("\n请输入作者:");
fflush(stdin);
scanf_s("%s", pBook->author, 20);
printf("\n请输入出版社:");
fflush(stdin);
scanf_s("%s", pBook->press, 20);
printf("\n请输入ID:");
fflush(stdin);
scanf_s("%d", &pBook->ID,4);
printf("\n请输入价格:");
fflush(stdin);
scanf_s("%d", &pBook->price,4);
}
/************************************
function:打印单本书籍信息
parameter:pBook--BookMessage型结构体
return:void
date:2019-12-3
author:残梦
************************************/
void PrintMssage(BookMessage pBook)
{
printf("书名:%10s\t作者:%10s\n出版社:%10s\tID:%10d\t价格:%d\n",
pBook.name, pBook.author, pBook.press, pBook.ID, pBook.price);
}
/************************************
function:打印全部书籍信息
parameter:pBook--BookMessage型结构体
return:void
date:2019-12-3
author:残梦
************************************/
void PrintAllMssage(BookMessage pBook[],int size)
{
int i = 0;
while (i < size)
{
printf("第%d本书\n",i+1);
PrintMssage(pBook[i++]);
}
}
/************************************
function:计算书籍价格最大值的下标
parameter:pBook--BookMessage型结构体,size--书籍量
return:void
date:2019-12-3
author:残梦
************************************/
int MaxPrice(BookMessage pBook[], int size)
{
int i = 0,max_num = 0;
while ((i+1) < size)
{
if (pBook[i].price > pBook[i + 1].price) max_num = i;
i++;
}
return max_num;
}
book.h
#ifndef _book_H_
#define _book_H_
#include <string>
#include <stdio.h>
#include <iomanip>
#define _CRT_SECURE_NO_DEPRECATE
struct BookMessage
{
char name[20];
int ID;
char author[20];
char press[20];
int price;
};
typedef struct BookMessage Book;
extern void ImportMssage(BookMessage *pBook);
extern void PrintMssage(BookMessage pBook);
extern void PrintAllMssage(BookMessage pBook[], int size);
extern int MaxPrice(BookMessage pBook[], int size);
#endif
效果图: