• C Primer Plus(6) 中文版 第14章 结构和其他数据形式 14.1 示例问题:创建图书目录


    设计程序时,最重要的步骤之一是选择表示数据的方法。C提供了结构变量(structure variable)提供你表示数据的能力,让你创造新的形式。
    14.1 示例问题:创建图书目录
    Gwen Glem要打印一份图书目录。她想打印每本书的各种信息:书名、作者、出版社、版权日期、页数、册数和价格。其中的一些项目(如,书名)可以存储在字符数组中,其他项目需要一个int数组或float数组。用7个不同的数组分别记录每一项比较繁琐,尤其是Gwen还想创建多份列表:
    一份按书名排序、一份按作者排序、一份按价格排序等。如果能把图书目录的信息包含在一个数组里更好,其中每个元素包含一本书的相关信息。
    因此,Gwen需要一种既能包含字符串又能包含数字的数据形式,而且还要保持各信息的独立。C结构就满足这种情况下的需求。我们通过一个示例演示如何创建和使用数组。但是,示例进行了一些限制。第一,该程序示例演示的书目只包含书名、作者和价格。第二,只有一本书的书目。
    程序清单14.1 book.c程序
    //* book.c -- one-book inventory */
    #include
    #include
    char * s_gets(char * st, int n);
    #define MAXTITL  41      /* maximum length of title + 1         */
    #define MAXAUTL  31      /* maximum length of author's name + 1 */

    struct book {            /* structure template: tag is book     */
        char title[MAXTITL];
        char author[MAXAUTL];
        float value;
    };                       /* end of structure template           */

    int main(void)
    {
        struct book library; /* declare library as a book variable  */
        
        printf("Please enter the book title.\n");
        s_gets(library.title, MAXTITL); /* access to the title portion         */
        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');   // look for newline
            if (find)                  // if the address is not NULL,
                *find = '\0';          // place a null character there
            else
                while (getchar() != '\n')
                    continue;          // dispose of rest of line
        }
        return ret_val;

    /* 输出:

    */

    程序清单14.1中创建的结构有3部分,每个部分都称为成员(member)或字段(field)。这3部分中,一部分存储书名,一部分存储作者名,一部分存储价格。下面是必须掌握的3个技巧:
    *为结构建立一个格式或样式;
    *声明一个合适样式的变量;
    *访问结构变量的各个部分。 

  • 相关阅读:
    D3JS简介
    redis实战-实现笔记点赞和点赞排行榜
    一个功能超全的「登录认证」神器!
    java基于springboot+vue的高校毕业生求职招聘系统 elementui 前后端分离
    心肺运动试验----各类参数分析笔记
    基于机器学习的自动音乐生成播放器
    学历低不能学编程?
    简单模拟Lur 算法
    ​力扣解法汇总1413-逐步求和得到正数的最小值
    负载均衡器 OpenELB ARP 欺骗技术解析
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126467660