Exercise 13: Switch Statement

Bài trước chúng ta đã học câu lệnh if, bài hôm nay chúng ta sẽ học lệnh switch (switch-statement). Đây là câu lệnh có chức năng khá giống với lệnh if, khi chúng ta có quá nhiều trường hợp, thì switch là giải pháp thay vì dùng lệnh if.

#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': 
            case 'A':
                printf("%d: 'A'\n", i);
                break;

            case 'e':
            case 'E':
                printf("%d: 'E'\n", i);
                break;

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

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

            case 'u':
            case 'U':
                printf("%d: 'U'\n", i);
                break;

            case 'y':
            case 'Y':
                if(i > 2)
                {
                    // it's only somethings Y
                    printf("%d: 'Y'\n", i);  
                }   
                break;

            default:
                printf("%d: %c is not a vowel\n", i, letter);

        }
    }

    return 0;
}

Đoạn code này mục đích là in tất cả nguyên âm trong một chuỗi được nhập ra ngoài. Và switch-statement làm việc như sau:
– Trình biên dịch sẽ kiểm tra biểu thức letter xem nó bằng bao nhiêu. Sau khi kiểm tra, nó sẽ nhảy tới 1 trong các trường hợp (case) nếu khớp giá trị, còn nếu không khớp thì sẽ nhảy vào trường hợp default.
Lưu ý:
1. Giả sử trong case ‘A’: không có lệnh break; thì nó sẽ tiếp tục nhảy xuống case ‘e’ để thưc hiện lệnh, vì lệnh break sẽ thoát ra khỏi lệnh switch.
2. Máy tính không hiểu letter là gì đâu, máy tính chỉ hiểu số binary. Vì vậy máy tính sẽ so sánh mã ASCII của letter và các kí tự trong case để thực hiện.

Các bạn phải thực hiện được nhứ thế này (làm theo tác giả và test thêm với valgrind):

$ make ex13
cc -Wall -g ex13.c -o ex13
$ ./ex13
ERROR: You need one argument.
$
$ ./ex13 Zed
0: Z is not a vowel
1: 'E'
2: d is not a vowel
$
$ ./ex13 Zed Shaw
ERROR: You need one argument.
$
$ ./ex13 "Zed Shaw"
0: Z is not a vowel
1: 'E'
2: d is not a vowel
3: is not a vowel
4: S is not a vowel
5: h is not a vowel
6: 'A'
7: w is not a vowel
$

Reseach

1. Sử dụng dấu phẩy ‘,’ (comma) để thiết lập biến letter trong vòng lặp for.
2. chuyển đổi switch sang if.

End

Advertisements