C语言学习笔记(二一)
创始人
2024-03-20 19:23:36
0

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';
}

相关内容

热门资讯

北平锋:民进党当局对所谓“两岸... 12月26日,台湾《中国时报》报道,陆委会近日推动所谓“两岸人民关系条例”四项修正,包含:公务员赴陆...
AI核心产业超万亿,工信部将完... 今年,工业经济顶压前行、向新向优发展,展现强大韧性和活力。 12月25日至26日,全国工业和信息化工...
神州泰岳(300002)披露全... 截至2025年12月26日收盘,神州泰岳(300002)报收于11.37元,较前一交易日上涨0.09...
车企起诉电池企业第一案!吉利旗... 出品 | 搜狐汽车·汽车咖啡馆 作者 | 胡耀丹 2024年底发出的回旋镖,在2025年底向欣旺达疾...
海南产经新观察:封关政策释红利... 中新网海南东方12月26日电 (陈英清)“海南自贸港封关运作顺利实施,政策红利持续释放,南繁水稻制种...
无证售药、两地维权!养生馆纠纷... 一副自制中药制剂,引发两地法院诉讼;一次耐心调解,让双方握手言和。近日,饶平县人民法院调解一宗因养生...
*ST节能(000820)披露... 截至2025年12月26日收盘,*ST节能(000820)报收于3.36元,较前一交易日上涨0.9%...
疑电芯质量存问题,500亿巨头... 二线电池厂商欣旺达(300207.SZ)被起诉了! 12月26日盘后,欣旺达披露公告称,公司子公司欣...
央行报告:加强房地产金融宏观审... 每经AI快讯,据央行网站12月26日消息,中国人民银行近日发布了《中国金融稳定报告(2025)》。报...
济南起步区“民生政策进社区”活...   鲁网12月26日讯深冬微寒,社区里却暖意融融。在起步区崔寨街道凤凰理想社区的小广场上,一排排政策...