• C Primer Plus(6) 中文版 第11章 字符串和字符串函数 11.4 自定义输入/输出函数


    11.4 自定义输入/输出函数
    不一定非要使用C库中的标准函数,如果无法使用这些函数或者不想用它们,完全可以在getchar()和putchar()的基础上自定义所需的函数。
    类似puts()但是不会自动添加换行符的函数。
    程序清单 11.14 put1()函数
    /* put1.c -- 打印字符串,不添加\n */
    #include
    void put1( const char *string ) /*不会改变字符串*/
    {
        while( *string != '\0' ){
            putchar( *string++ );
        }    

    *运算符要从右往左计算。
    可以把put1.c程序作为编写字符串处理函数的模型。因为每个字符串都以空字符结尾,所以不用给函数传递字符串大小。函数依次处理每个字符,直至遇到空字符。
    用数组表示法编写这个函数稍微复杂些:
    int i = 0;
    while( string[i] != '\0' ){
        putchar( string[i++] );

    要为数组索引创建一个额外的变量。
    许多C程序员会在while循环中使用下面的测试条件:
    while( *string )
    当string指向空字符时,*string的值是0,即测试条件为假,while循环结束。这种方法比上面两种方法简洁。这种处理方法在C语言中很普遍,作为C程序员应该熟悉这种写法。
    注意
    为什么put1.c中的形式参数是const char *string,而不是const char string[]?从技术方面看,两者等价都有效。使用方括号是为了提醒用户,该函数处理的是数组。然而,如果要处理字符串、实际参数可以是数组名、用双引号括起来的字符串,或声明为char *类型的变量。用const char *string可以提醒用户:实际参数不一定是数组。
    设计一个类似puts()的函数,而且该函数还给出待打印字符的个数。
    程序清单11.15 put2.c程序
    /*put2.c --- 打印一个字符串,并统计打印的字符数*/
    #include
    int put2( const char *string ){
        int count = 0;
        while( *string ){
            putchar( *string++ );
            count++;
        }
        putchar( '\n' ); /*不统计换行符*/
        
        return (count); 

    简单的驱动程序测试put1()和put2(),并演示了嵌套函数的调用 
    //put_put.c -- user-defined output functions
    #include
    void put1(const char *);
    int put2(const char *);

    int main(void)
    {
        put1("If I'd as much money");
        put1(" as I could spend,\n");
        printf("I count %d characters.\n",
               put2("I never would cry old chairs to mend."));
        
        return 0;
    }

    void put1(const char * string)
    {
        while (*string)  /* same as *string != '\0' */
            putchar(*string++);
    }

    int put2(const char * string)
    {
        int count = 0;
        while (*string)
        {
            putchar(*string++);
            count++;
        }
        putchar('\n');
        
        return(count);
    }
    /* 输出:

    */

    为了获得put2()的返回值,计算机必须先执行put2(),因此在打印字符数之前先打印了传递给该函数的字符串。 

  • 相关阅读:
    vue中screenfull组件实现全屏和非全屏+怎么给页面全屏加一张图片且不需要设置js获取页面高度
    淘宝电商api接口
    Coremail受邀出席创新生态融合赋能智慧校园建设与网络安全研讨会
    【毕业设计】奥运会数据分析与可视化 - python 大数据
    指针进阶(三)之指针与数组笔试题
    38. 对对象与数组的解构的理解?
    【实验】Hadoop-2.7.2+zookeeper-3.4.6完全分布式环境搭建(HDFS、YARN HA)转载
    s23.基于 Kubernetes v1.25.0(kubeadm) 和 Containerd部署高可用集群
    Java TreeSet类简介说明
    T31开发笔记: 使用FTP上传下载文件
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126271169