30/09/2018, 20:30

Em đang thăc mắc trong đoan code sau không thể dùng if

đề :Nhập vào 1 ký tự là chữ cái. Nếu nhập sai thì báo thông báo đã nhập sai. Nếu đúng thì đi kiểm tra nếu đó đang là chữ cái thường thì biến nó thành chữ cái hoa, nếu nó là chữ cái hoa thì biến nó thành chữ thường.
Gợi ý: Ký tự chữ cái thường và hoa có mã ASCII cách nhau 32 đơnvị. Vd: ‘a’ là 97, ‘A’ là 65
em đang thắc mắc ở đoạn code sau :if (kytu>=‘A’&&kytu<=‘Z’) nếu em dùng if thì nhập vào ký tự nào thì nó vẫn không chuyển sang ký tự khác ví dụ nhập h vẫn là h không chuyển sang kiểu in hoa ngược lại dùng
else if (kytu>=‘A’&&kytu<=‘Z’) thì chuyển
code:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
	char kytu;
	printf(" nhap mot ky tu :
");
	scanf("%c",&kytu);
	if((kytu>='a'&& kytu<='z') || (kytu>='A'&&kytu<='Z'))
	{
		if(kytu>='a'&& kytu<='z')
		{
			kytu=kytu-32;
			
	    }  
	    if (kytu>='A'&&kytu<='Z')
		{
			kytu=kytu+32;
		}
	    printf("%c",kytu);
		
	}
	else
	{
		printf("vui long nhap lai:
");
	}
Hưng Đỗ viết 22:44 ngày 30/09/2018

ủa bác nếu bác nhập h thì đâu có lớn hơn hoặc bằng A và nhỏ hơn hoặc bằng Z A->Z là 65->90 h là 104 thì nó không thoả mãn -> sẽ chuyển tới esle là in ra vui lòng nhập lại chứ

Lê Tuấn Anh viết 22:31 ngày 30/09/2018

Phân tích 1 chút:
Nếu bạn dùng if (kytu>='A'&&kytu<='Z') khi nhập kí tự ‘h’ vào thì :

  1. Kiểm tra if(kytu>='a'&& kytu<='z') => Đúng => kytu=kytu-32; (bằng 'H')
  2. Kiểm tra tiếp if (kytu>='A'&&kytu<='Z') => Lại đúng => kytu=kytu+32; (bằng 'h')
  3. In kết quả là h

Nếu dùng else if (kytu>='A'&&kytu<='Z') sẽ không thực hiện các lệnh sau else nữa, do cái if ở [1] đã đúng rồi. Do đó sẽ in ra H

Bài liên quan
0