我正在参与掘金创作者训练营第5期,点击了解活动详情
举个简单例子
创建一个图书目录(书名需要英文)
我用的是Xcode
#include <stdio.h>
#include<string.h>
char * s_gets(char*st,int n);
#define MAXTITL 41 //书名的最大长度+1
#define MAXAUTL 31 //作者姓名的最大长度+1
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library; //结构模版结束
int main(void) {
struct book library; //把library声明为一个book类型的变量
printf("Please enter the book title.\n");
s_gets(library.title,MAXTITL); //访问标题部分
printf("Now enter the author.\n");
s_gets(library.author,MAXAUTL);
printf("Now enter the value.\n");
scanf("%f",&library.value);
printf("%s by %s :$%.2f\n",library.title,library.author,library.value);
printf("%s: \"%s\"($%.2f)\n",library.author,library.title,library.value);
printf("Done.\n");
return 0;
}
char*s_gets(char*st,int n){
char*ret_val;
char*find;
ret_val = fgets(st,n,stdin);
if (ret_val){
find = strchr(st,'\n'); //查找换行符
if(find) //如果地址不是NULL
*find = '\0'; //在此处放置一个空字符
else
while (getchar() !='\n')
continue; //处理输入行中剩余的字符
}
return ret_val;
}
运行结果
关于结构
建立结构声明
结构声明描述了一个结构的组织布局。例如:
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
上面声明描述了一个由两个字符数组和一个float类型变量组成的结构,描述了该对象由什么组成。我们来看看具体的:关键字struct表明后面是一个结构,后面是一个可选的标记,稍后程序中可以使用该标记引用该结构,所以我们在主函数这样声明:
struct book library;
把library声明为了一个使用book结构布局的结构变量。
在结构声明中,用花括号括起来的是结构成员列表。每个变量有自己声明来描述。例如,author部分是一个含有MAXAUTL个元素的char类型数组。
花括号括回需要分号表示结构布局定义结束。
struct book 相当于一般声明里的int或float。
初始化
在看结构初始化前,先看看数组是如何初始化:
int count = 0;
int cakes[7]={0,1,2,3,4,5,6};
我们使用一对花括号括起来的初始化列表进行初始化,各初始化项用逗号分隔。所以,title可以初始化成一段字符串,value可以初始化成数字。建议每行成员的初始化一个一行,这样看起来美观一些。 例如,对前面结构进行初始化变量:
struct book library = {
"The Pious Pirate and the Devious Damsel",
"Renee Vivotte",
1.97
};
访问结构成员
结构类似于“一个大数组”,里面包含很多元素,可能是int,也可能是char。我们可以通过数组下标来访问各元素,例如:
library.author表示访问library中的author部分。
像.title .author都是book结构的下标。
library.author这种的是float类型,可以像float那样用。