30/09/2018, 20:16

Có cách nào dùng lệnh switch case (C) tốt hơn dòng code giải bài tập phân biệt dưới đây không?

Bài tập: Viết chương trình phân biệt một ký tự là chữ cái (abc) hay không phài chữ cái (~!")
Code: bài mình làm

#include <stdio.h>
#include <stdlib.h>
int main()
{
   char ky_tu = 'g';
   switch(ky_tu){
       case 97:
       printf("Day la chu
");
       break;
       case 98:
       printf("Day la chu
");
       break;
       case 99:
       printf("Day la chu
");
       break;
       case 100:
       printf("Day la chu
");
       break;
       case 101:
       printf("Day la chu
");
       break;
       case 102:
       printf("Day la chu
");
       break;
       case 103:
       printf("Day la chu
");
       break;
       case 104:
       printf("Day la chu
");
       break;
       case 105:
       printf("Day la chu
");
       break;
       case 106:
       printf("Day la chu
");
       break;
       case 107:
       printf("Day la chu
");
       break;
       case 108:
       printf("Day la chu
");
       break;
       case 109:
       printf("Day la chu
");
       break;
       case 110:
       printf("Day la chu
");
       break;
       case 111:
       printf("Day la chu
");
       break;
       case 112:
       printf("Day la chu
");
       break;
       case 113:
       printf("Day la chu
");
       break;
       case 114:
       printf("Day la chu
");
       break;
       case 115:
       printf("Day la chu
");
       break;
       case 116:
       printf("Day la chu
");
       break;
       case 117:
       printf("Day la chu
");
       break;
       case 118:
       printf("Day la chu
");
       break;
       case 119:
       printf("Day la chu
");
       break;
       case 120:
       printf("Day la chu
");
       break;
       case 121:
       printf("Day la chu
");
       break;
       case 122:
       printf("Day la chu
");
       break;
       default:
       printf("Day khong phai la chu cai
");
       break;
   }
   return 0;
}
Đức Huỳnh viết 22:24 ngày 30/09/2018

Bỏ break với mấy cái râu ria kia đi (không áp dụng với Java )… mà sao bạn không dùng if else nhỉ ???

    switch(ky_tu){
        case 97:
        case 98:
        case 99:
       ...
        case 122:
            printf("Day la chu\n");
            break;
        default:
            printf("Day khong phai la chu cai\n");
            break;
    }
Itachi Citus viết 22:25 ngày 30/09/2018

Bạn có thể thay bằng 4 điều kiện if:

if (('a' <= ky_ty && 'z' >= ky_tu) || ('A' >= ky_tu && 'Z' <= ky_tu))
   printf("Day la chu \n");
else
    printf("Day khong phai la chu\n");

switch case bạn chỉ nên dùng trong trường hợp điều kiện rời rạc và số lượng cố định thôi. Trong trường hợp này nhìn thì giá trị có vẻ rời rạc, nhưng do đặc điểm của bảng mã ASCII nên các ký tự hoa và các ký tự thường được xếp liên tục gần nhau nên bạn có thể thu gọn lại trong 2 trường hợp xét ký tự thường và hoa như trên.

Pham Van Hai viết 22:30 ngày 30/09/2018
  • Các ký tự trong C điều theo bảng mã ASCII:
    https://vi.wikipedia.org/wiki/ASCII
  • Theo bảng này thì chữ cái sẽ nằm liêp tiếp trong một khoảng từ a -> z và từ A đến Z nên bạn chỉ cần if else là đủ, ví dụ như các bạn ở trên.
Ngô Hải Long viết 22:32 ngày 30/09/2018

À thì đang làm bài tập chỉ sử dụng lệnh đó thôi, trong phần bài tập mà Đạt post tront video Ngôn Ngữ C ấy.
Mà viết code trong này như thế nào thế bạn Shangzan?

Đức Huỳnh viết 22:24 ngày 30/09/2018

Thì từ case 97 đến case 121 bạn bỏ 2 dòng breakprintf đi, cho ngắn bớt…
Khi đó nếu nhập vào từ 97 đến 121 thì nó cũng chạy đến case 122 và in ra từ Đây là chữ luôn.

Bài liên quan
0