Video Ngôn Ngữ C - 15 - Lệnh Switch với ký tự

Rảnh ngồi phá chơi :slight_smile: :slight_smile: :slight_smile:
Mà anh có thể nói rõ hơn cho em phần bài tập được không ạ, PHÂN BIỆT ở đây là s, ý anh là cho int = …; rồi dùng switch để với mỗi giá trị int = …; thì mình có mỗi chữ khác nhau, em nghĩ ý anh là vậy

5 Likes

Trông đẹp lắm, có hoa tay đấy.

Phân biệt ở đây là em nhập vào một ký tự, kiểm tra xem đây là chữ cái abc hay không phải là chữ cái, vì dụ ~!@#$

4 Likes

dạng vậy hả anh

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int char= 'a';
    switch(char){
         case 'a':
            printf("day la chu a");
         case ...
         default:
            printf(" day la ky tu %c", char)
}

    return 0;

}
3 Likes

Đúng vậy, nhưng nếu em code vậy thì code sẽ dài lắm ^^

3 Likes
int main()
{
    char kytu = 'a';
    switch (kytu)
    {
    case 'a':
    case 'b':
    case 'c':
        printf("day la chu");
        break;
    default:
        printf("day k phai chu");
    }

    return 0;
}

đáp án như vậy phải không anh, hic hơi khó nhìn do e chưa post ảnh đc thông cảm :smiley:

2 Likes

Gần đúng rồi đấy, nhưng lỡ anh gõ chữ z vào thì sao?

Đừng, đừng bao giờ chụp hình code của em lên, rất khó đọc. Nó xấu bởi vì em chưa format code. Anh đã format rồi đó. Em xem thêm link này để biết cách format code nhìn cho đẹp.

2 Likes

nếu vậy phải thêm code cho đủ 26 chữ cái :blush: ,em sẽ edit sau

2 Likes

Eo, mấy nay bận, bạn @viethai post trc rồi, thôi làm bản full, có gì sai anh sửa giùm

#include <stdio.h>
#include <stdlib.h>

int main()
{
int chu = '"';
switch(chu){
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
    printf("this is a char %c", chu);
    break;
default:
    printf("this is not a char, it's %c", chu);
}
 return 0;
}
5 Likes

quá là đẹp nuôn :smiley:

2 Likes

Haha, có cách khác hay hơn. Anh muốn sửa lắm mà anh nghĩ thôi gợi ý mọi người thôi. Mình đừng dùng switch nữa, mà hãy dùng lệnh if. Nhớ một điều ký tự cũng là số thôi :smiley: Ai làm được nhào zô.

3 Likes

thế đc dùng for không a?

Anh chỉ muốn một cách làm khác không dùng switch. Em có thể làm cách nào tùy ý, có thể dùng for thoải mái nếu cách giải của em cần dùng for.

2 Likes

Nóng hổi mới ra lò nuôn :yum:

#include< stdio.h>
#include< conio.h>
void main()
{
    printf("Bang chu cai thuong:\n");
    for (int i = 97; i <= 122; i++)
    {
        printf("%c ", i);
    }
    printf("\n\nBang chu cai in hoa:\n");
    for (int i = 65; i <= 90; i++)
    {
        printf("%c ", i);
    }
    getch();
}
2 Likes

Em lạc đề rồi, nhưng ý tưởng dùng số là đúng. Bài này là kiểm tra một ký tự nhập vào có phải là chữ hay không.

Anh nhớ không nhầm là vậy, nhắc anh nếu anh nhớ sai đề nhé. Vì nhiều videos và anh làm đã lâu nên anh không nhớ đề.

1 Like
#include<stdio.h>
int main()
{
    char ky_tu;
    printf("Nhap mot ky tu bat ki:");
    scanf("%c",&ky_tu);
    if((ky_tu>='a'&&ky_tu<='z')||(ky_tu>='A'&&ky_tu<='Z')||(ky_tu>=0&&ky_tu<=9))
        printf("Dung,day la mot ky tu.");
    else
        printf("Day khong phai la mot ky tu.");
    return 0;
}

3 Likes

E lạc đề thiệt, sr sr mn :frowning:

1 Like

Và đây chúng ta đã có một lời giải ngắn hơn hợp lý hơn cho bài toán kiểm tra ký tự nhập vào có phải là chữ cái hay không.

@14520054 đã code

#include<stdio.h>
int main()
{
    char ky_tu;
    printf("Nhap mot ky tu bat ki:");
    scanf("%c",&ky_tu);
    if((ky_tu>='a'&&ky_tu<='z')||(ky_tu>='A'&&ky_tu<='Z')||(ky_tu>=0&&ky_tu<=9))
        printf("Dung,day la mot ky tu.");
    else
        printf("Day khong phai la mot ky tu.");
    return 0;
}

Hợp lý hơn bởi vì ta có thể dễ dàng kiểm tra ký tự thuộc về khoảng ‘a-z’ hay ‘A-Z’ thay vì phải kiểm tra từng ký tự như dùng switch, có ai đảm bảo rằng việc mình sẽ chắc chắn viết đầy đủ từ ‘a-z’ trong switch mà không quên một chữ nào :smile: Và khi có lỗi thì việc tra từng casenightmare cho lập trình viên.

P/S: Anh rất thích cách @14520054 dùng biến char ky_tu; thay cho char c; hoặc char n;. Rất rõ ràng.

5 Likes

thưa anh. a có thể giải thích rõ cho em về câu lệnh:

if((ky_tu>='a'&&ky_tu<='z')||(ky_tu>='A'&&ky_tu<='Z')||(ky_tu>=0&&ky_tu<=9))

được không ạ? em không hiểu các kí hiệu trong đó? :’(

Em muốn nói tới các ký tự này hả? Anh giải thích ở dưới.

>=: lớn hơn hoặc bằng
<=: bé hơn hoặc bằng

1 Like

Ở đây em sẽ cố giải thích dễ hiểu nhất:

  1. &&: và, ||: hoặc
  2. Trong lập trình, có thể coi chữ như số, chỉ khác kiểu dữ liệu (1 cái kiểu char, 1 cái kiểu int)
  • Nghĩa là chữ, vẫn có thể đổi được thành số, và số cũng có thể đổi được thành chữ.
  • Và chúng ta chuyển đổi giữa 2 cái này theo bảng mã ASCII, đây là hình của em nó:
  • Theo như cái bảng này, nếu chuyển số 97 sang chữ, nó sẽ thành chữ ‘a’, cũng như nếu đổi từ chữ ‘a’ sang số, nó sẽ là số 97 (theo như bảng ASCII
    VD: sau đây là 1 đoạn code để chuyển đổi làm ví dụ:
int main()
{
printf("%c", 97); // Do yêu cầu in ra màn hình là 1 ký tự (%c), thế nhưng ta lại truyền vào cái % đó 1 số nguyên (phải số nguyên mới được nhé), vì vậy nó sẽ chuyển số 97 thành 1 ký tự cho phù hợp với cái %, và theo bảng ASCII, 97 sẽ chuyển thành chữ 'a'

printf("%d", 'a'); // Như ở trên, do mình cần xuất ra 1 số nguyên (%d), nhưng lại truyền vào cái %d ấy 1 ký tự (chữ 'a'). Vì thế, nó sẽ chuyển chữ 'a' thành số, và theo ASCII, 

return 0;
}

Cơ bản là thế, giờ là dòng lệnh trên

(ky_tu >= 'a' && ky_tu <= 'z') || (ky_tu >= 'A' && ky_tu <= 'Z') || 
(ky_tu >= 0 && ky_tu <= 9)

Như đã nói ở trên, chữ có thể coi là số và ngược lại

  1. Theo bảng ASCII, chữ cái có số lớn hơn thì lớn hơn, ví dụ, chữ b chuyển qua số sẽ là 98, còn a chuyển qua sẽ là 97. 98 > 97 => b > a

  2. Vậy, khi nhập 1 chữ cái thường theo bảng chữ cái alphabet (a, b, c, …) thì nó sẽ nằm trong đoạn từ a -> z, hay nói cách khác, nếu chuyển sang số, nó sẽ trong đoạn từ 97 -> 122.

  3. Ở đoạn code này Sẽ kiểm tra xem ký tự nhập vào có nằm trong đoạn từ a -> z không. Và cũng như thế với 2 cụm kia, là kiểm tra xem có nằm trong đoạn 'A' -> 'Z' không (chữ hoa theo bảng mã có số khác chữ thường nha, đừng lẫn lộn

ky_tu >= 'a' && ky_tu <= 'z'

Nếu vẫn chưa hiểu, anh có thể add Skype em cho dễ nói chuyện:
Name: Long Mr
Mail: [email protected]

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?