E lạc đề thiệt, sr sr mn
Video Ngôn Ngữ C - 15 - Lệnh Switch với ký tự
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 Và khi có lỗi thì việc tra từng case
là nightmare
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.
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
Ở đây em sẽ cố giải thích dễ hiểu nhất:
- &&: và, ||: hoặc
- 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ểuint
)
- 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
-
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òna
chuyển qua sẽ là97
.98 > 97
=>b > a
-
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
. -
Ở đ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]
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 :))
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ỉ
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
để 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
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
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:
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()
{
}
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;
}