使用C语言创建图书目录并对结构进行介绍

202 阅读2分钟

我正在参与掘金创作者训练营第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;
}

运行结果

Snipaste_2022-08-05_19-07-46.png

关于结构

建立结构声明

结构声明描述了一个结构的组织布局。例如:

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那样用。