练习13:Switch语句 笨办法学C

练习13:Switch语句

  • 编写另一个程序,在字母上做算术运算将它们转换为小写,并且在switch中移除所有额外的大写字母。
#include <stdio.h>
int main(int argc, char *argv[])
{
    if(argc != 2) {
        printf("ERROR: You need one argument.\n");
        // this is how you abort a program
        return 1;
    }
    int i = 0;
    for(i = 0; argv[1][i] != '\0'; i++) {
        char letter = argv[1][i];
        switch(letter) {
            case 'a' :
                printf("%d: 'A'\n", i);
                break;                                                       
            case 'A':
                argv[1][i]='\0';
                break;
            case 'e':
                printf("%d: 'E'\n", i);
            case 'E':
                argv[1][i]='\0';
                break;
            case 'i':
                printf("%d: 'I'\n", i);
            case 'I':
                argv[1][i]='\0';
                
                break;
            case 'o':
                printf("%d: 'O'\n", i);
            case 'O':
                
                argv[1][i]='\0';
                break;
            case 'u':
                printf("%d: 'U'\n", i);
            case 'U':
                
                argv[1][i]='\0';
                break;
            case 'y':
            case 'Y':
                if(i > 2) {
                    // it's only sometimes Y
                    printf("%d: 'Y'\n", i);
                }
                break;
            default:
                printf("%d: %c is not a vowel\n", i, letter);
        }
    }
    return 0;
}

在这里插入图片描述

  • 使用’,'(逗号)在for循环中初始化letter。
#include <stdio.h>
int main(int argc, char *argv[])
{
    if(argc != 2) {
        printf("ERROR: You need one argument.\n");
        // this is how you abort a program
        return 1;
    }
    int i = 0;
    char letter = argv[1][0];                                        

    for(i = 0; argv[1][i] != '\0'; i++,letter = argv[1][i]){
        switch(letter) {
            case 'a' :
                printf("%d: 'A'\n", i);
                break;
            case 'A':
                argv[1][i]='\0';
                break;
            case 'e':
                printf("%d: 'E'\n", i);
            case 'E':
                argv[1][i]='\0';
                break;
            case 'i':
                printf("%d: 'I'\n", i);
            case 'I':
                argv[1][i]='\0';

                break;
            case 'o':
                printf("%d: 'O'\n", i);
            case 'O':

                argv[1][i]='\0';
                break;
            case 'u':
                printf("%d: 'U'\n", i);
            case 'U':

                argv[1][i]='\0';
                break;
            case 'y':
            case 'Y':
                if(i > 2) {
                    // it's only sometimes Y
                    printf("%d: 'Y'\n", i);
                }
                break;
            default:
                printf("%d: %c is not a vowel\n", i, letter);
        }
    }
    return 0;
}

  • VIM批量缩进
在程序代码界面,按esc,退出编辑模式,到命令模式,并在英语输入法下输入“:”

将所要批量缩进的行号写上,按照格式:“行号1,行号2>”输入命令,如要将29行批量缩进一个tab值,则命令为“2,9>”

输入完毕后,按回车可以执行,就可以看到29行全部缩进了一个tab值了,
  • 使用另一个for循环来让它处理你传入的所有命令行参数。
    这里把./ex13也会当作第一个参数
#include <stdio.h>
int main(int argc, char *argv[])
{
    if(argc != 2) {
        printf("ERROR: You need one argument.\n");
        // this is how you abort a program
        return 1;
    }
    int i = 0;
    char letter = argv[1][0];

    int j = 0;                                                              
    for(j=0;j<argc;j++){


            for(i = 0; argv[j][i] != '\0'; i++,letter = argv[j][i]){
                switch(letter) {
                    case 'a' :
                        printf("%d: 'A'\n", i);
                        break;
                    case 'A':
                        argv[j][i]='\0';
                        break;
                    case 'e':
                        printf("%d: 'E'\n", i);
                    case 'E':
                        argv[j][i]='\0';
                        break;
                    case 'i':
                        printf("%d: 'I'\n", i);
                    case 'I':
                        argv[j][i]='\0';
                        break;
                    case 'o':
                        printf("%d: 'O'\n", i);
                    case 'O':
                        argv[j][i]='\0';
                        break;
                    case 'u':
                        printf("%d: 'U'\n", i);
                    case 'U':
                        argv[j][i]='\0';
                        break;
                    case 'y':
                    case 'Y':
                        if(i > 2) {
                            // it's only sometimes Y
                            printf("%d: 'Y'\n", i);
                        }
                        break;
                    default:
                        printf("%d: %c is not a vowel\n", i, letter);
                }
            }


    }
    return 0;
}

在这里插入图片描述

  • 在“Y”的例子中,我在if代码块外面写了个break。这样会产生什么效果?如果把它移进if代码块,会发生什么?自己试着解答它,并证明你是正确的。
如果将break语句从if代码块外部移到if代码块内部,会导致不同的行为。

当前的代码如下:


case 'y':
case 'Y':
    if (i > 2) {
        // it's only sometimes Y
        printf("%d: 'Y'\n", i);
    }
    break;
如果将break移动到if代码块内部,如下所示:

case 'y':
case 'Y':
    if (i > 2) {
        // it's only sometimes Y
        printf("%d: 'Y'\n", i);
        break;
    }
这样做会导致在满足条件i > 2时打印出"'Y'"并终止switch语句。也就是说,当letter为小写字母'y'或大写字母'Y'且i大于2时,将打印"'Y'"并结束当前的case分支。

将break移到if代码块内部的效果是,当条件满足时,将终止switch语句的执行,而不会继续执行后续的case分支。如果将break放在if代码块外部,switch语句会继续执行后续的case分支,而不会在满足条件时中断。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44781508

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值