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

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

Code này mình thấy có lẽ thiếu ví dụ A B C D cũng là ký tự mà !

bài này em nhớ lúc học 11 pascal thi học kì cũng có câu này :v . Lúc đó e dùng if y chang như này luôn :))

1 Like

Ký tự và số nhảy qua nhảy lại được với nhau, vậy làm sao mình kiểm soát được nhỉ :smile:
như trong ví dụ dưới đây “a” và “97” nó giống nhau, để phân biệt 2 cái này thì làm sao đây mọi người

Cho mình hỏi thêm là tại sao phải return về 0 nhỉ, nếu không trả về 0 thì có lỗi gì không

Cảm ơn mọi người.

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

int main()
{
char x = 'a';
int y = 1;
switch (x)
{   case 97:
        printf("a=97 \n");
        break;
    default:
        printf("nothing");
        break;
}
return 0;
}

Cái này mở bảng ASCII là thấy.
Dùng if sẽ ngắn hơn nhiều vì ký tự sắp xếp theo thứ tự a->z, A->Z,0->9 liên tiếp nhau.
Ví dụ từ số 0 đến số 9 tương ứng từ 48 đến 57. Như vậy cứ nằm trong khoảng 48->57 sẽ là số.

if(c>=48 && c<=57)
    printf("day la so");

chữ d là viết tắt của từ gì anh đạt ơi

oke decimal :smiley:

1 Like

để bữa nào em không đi làm em ở nhà em làm hihi
chụp lên cho anh xem hen hihi

1 Like

anh ơi em không hiểu chỗ ||(ky_tu>=0&&ky_tu<=9))
nó có nghĩa là gì vậy, em tra trong bảng ascii thấy toàn từ khó hiểu

Câu này bạn hỏi về bài nào nhỉ. Đạt online điện thoại khó kiểm tra.

Nhưng đoan đó kiểm tra giá trị có nằm trong khoảng 0 9 hay k thôi

2 Likes

em hiểu rồi!cám ơn anh nhiều! sẵn tiện cho em hỏi là khi em dán code lên đây để thảo luận thì làm sao để code format đẹp và có màu như mấy bạn ở trên!

Bạn làm theo hướng dẫn bên dưới:

2 Likes

sao mình cho 3 dấu ``` vào đầu và cuối thì được nhưng bôi đen code và nhấn ctr K thì nó ra insert hyperlink gì đó bạn!

Bạn thử Ctr + Shift + C xem

int main()
{
}
1 Like

ah được rồi!cám ơn bạn nhiều

mình là thành viên mới đang bắt đầu học C.
xin trả bài cho thầy.

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int i;
	char n;
	scanf("%c",&n);
	i=("%d",n);
	if(i<=122)
	{
		if(i>=65)
		printf("day la chu");
		
	else
	printf("day khong phai la chu");
	}
	else
	printf("day khong phai la chu");
	
	return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?