• C语言学习笔记(二一)


    C语言学习第二十一天。

    3.4 switch语句

    switch语句是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作。

        switch (表达式) {
            case 常量表达式: 语句序列
            case 常量表达式: 语句序列
            default: 语句序列
        }

    每一个分支都由一个或多个整数值常量或常量表达式标记。如果某个分支与表达式的值匹配,则从该分支开始执行。各分支表达式必须互不相同。如果没有哪以分支能匹配表达式,则执行标记为default的分支。default分支是可选的。如果没有defualt分支也没有其他分支与表达式的值匹配,则该switch语句不执行任何动作。各分支及default分支的排列次序是任意的。

    下面用switch语句改写统计各个数字、空白符及其他所有字符出现的次数。

    #include

    /* 统计数字、空白符及其他字符 */
    main() {
        int c, i, nwhite, nother, ndigit[10];

        nwhite = nother = 0;
        for (i = 0; i < 10; i++)
            ndigit[i] = 0;
        while ((c = getchar()) != EOF) {
            switch (c) {
                case '0': case '1': case '2': case '3': case '4':
                case '5': case '6': case '7': case '8': case '9':
                    ndigit[c-'0']++;
                    break;
                case ' ':
                case '\n':
                case '\t':
                    nwhite++;
                    break;
                default:
                    nother++;
                    break;
            }
        }
        printf ("digits =");
        for (i = 0; i < 10; i++)
            printf(" %d", ndigit[i]);
        printf (", white space = %d, other = %d\n", nwhite, nother);
        return 0;
    }

    break语句将导致程序的执行立即从switch语句中退出。在switch语句中,case的作用只是一个标号,因此,某个分支的代码执行完后,程序将进入下一分支继续执行,除非在程序中显示地跳转。跳出switch语句最常用的方法是使用break语句与return语句。break语句还可以强制控制从while、for与do循环语句中立即退出。
    除了一个计算需要多个标号的情况外,应尽量减少从一个ie分支直接进入下一个分支执行这种用法,在不得不使用的情况下应该加上适当的程序注释。

    练习3-2 编写一个函数escape(s, t),将字符串t赋值到字符串s中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用switch语句。再编写一个具有相反功能的函数,再复制过程中将转义字符序列转换为实际字符。

    int escape (char s[],  char t[]) {
        int i, j;

        i = j = 0;
        while (t[i] != '\0') {
            switch (t[i])
            {
            case '\n':
                s[j++]  = '\\';
                s[j++] = 'n';
                break;
            case '\t':
                s[j++] = '\\';
                s[j++] = 't';
            default:
                s[j++]  = t[i];
                break;
            }
            i++;
        }
        s[j] = '\0';
    }

    int unescape (char s[],  char t[]) {
        int i, j;

        i = j = 0;
        while (t[i] != '\0') {
            if (t[i] == '\\') {
                i++;
                switch (t[i])
                {
                case 'n':
                    s[j++] = '\n';
                    break;
                case 't':
                    s[j++] = '\t';
                    break;
                case '\'':
                    s[j++] = '\'';
                    break;
                case '\"':
                    s[j++] = '\"';
                    break;
                default:
                    s[j++] = '\\';
                    s[j++] = t[i];
                    break;
                }
            } else {
                s[j++]  = t[i];
            }
            i++;
        }
        s[j] = '\0';
    }

  • 相关阅读:
    【高数】高数平面立体几何
    Ubuntu服务器搭建 - 环境篇
    Spring-MVC使用JSR303及拦截器,增强网络隐私安全
    国外Windows主机的特点
    数据结构哈希表
    java【毕业设计】项目-第112期基于ssm的企业工资管理系统-计算机毕业设计
    Visual Studio 生产环境配置方案:SlowCheetah
    开发者驱动的软件公司,如何赚取万亿美元?
    【go微服务】RPC的原理与Go RPC
    【C++】C++ 入门
  • 原文地址:https://blog.csdn.net/u014360189/article/details/128194717