Cần giúp đỡ về đoạn code xét điều kiện input

Mình đang làm 1 bài tính Ckn(tổ hợp) và chỉnh Hợp, phần input giáo viên bắt phải kiểm tra nhập vào ký tự hay số, nếu nhập vào ký tự hoặc số k hợp lệ thì sẽ phải nhập lại.
Mình có thử dùng mấy cách nhưng vẫn k đc vì khi đến chỗ scanf("%c", type) thì nó nhận Enter của dòng trên @@. Ai fix dùm mình đc k @@.

void inputW2(int *n, int *k, char *type)
{
	char c,c1;
	printf("Probability Calculator\n======================\n");
	do{		
	printf("Quantity from which to select:   ");
	scanf("%d%c", n,&c);
	printf("Quantity to be selected:         ");
	scanf("%d%c", k,&c1);
	printf("Does order matter (y or n) ? :   ");
	scanf("%c", type);
	if((*n < *k || *n<0 || *k<0 || c!='\n'|| c1!='\n'|| *type != 'y'|| *type != 'n')){
		printf("\nInput value is not valid\n");
		clear();	
	}
	}while(*n < *k || *n<0 || *k<0 || c!='\n'|| c1!='\n'|| *type != 'f'|| *type != 'p');

}

Mình đã chạy code của bạn và thấy bình thường ở chỗ scanf("%c", type);, không có gì lạ hết.

Mình chỉ thấy vấn đề ở đây là cho dù có input nào thì program cũng hiện lên “Input value is not valid”. Cái vấn đề đó thì nằm ở chỗ if statement của bạn, chính xác hơn là cái phần *type != 'y'|| *type != 'n'. Giả sử:
Mình bỏ y cho type, loop sẽ checks (y != y --> false, y != n --> true) --> True
Mình bỏ n cho type, loop sẽ checks (n != y --> true) --> True
2 thằng True vậy thì lúc nào bạn cũng sẽ bị “invalid input” thôi. Cái thằng while loop của bạn cũng bị vấn đề này nữa.

Cách sửa: *type != 'y'&& *type != 'n' (hình của mình phía trên)

5 Likes

Cảm ơn b nhiều ạ. Mình hiểu r :sweat_smile::sweat_smile:

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