Thực hiện hai hàm scanf nhập kí tự

Chào mọi người ạ, qua tìm hiểu trên mạng thì em biết được không thực hiện được hai dòng lệnh

scanf("%c", &a);
scanf("%c", &b);

bởi khi nhấn enter cho lệnh scanf thứ nhất thì ký tự xuống dòng sẽ truyền cho lệnh scanf thứ 2
Theo lời giải thích này thì đoạn code sau cũng không thực hiện được như ý muốn chứ ạ:

	char x;
	char y[2];
	printf("Nhap gia tri x vao: ");
	scanf("%c", &x);
	printf("Nhap gia tri y vao: ");
	scanf("%s", &y);
	printf("\nGia tri x vua nhap la: %c\n", x);
	printf("Gia tri y vua nhap la: %s\n", y);

Mọi người giải thích giúp em với ạ.
Em cảm ơn ạ.

Như ý muốn là như thế nào?
Ở đoạn 2 phần nhập thế nào?

1 Like

dáng lẽ là chỉ nhập được cái scanf đầu tiên thôi chứ ạ
vì ký tự xuống dòng truyền cho y rồi ạ

Ừ thì nó truyền cho y RỒI. Tức là đã thực hiện thành công cả 2 dòng scanf().

Bạn hỏi mà không hiểu bạn muốn hỏi gì luôn.

1 Like

vâng truyền cho y rồi, đáng lẽ không nhập được nữa, nhưng em vẫn nhập được kí tự nữa cho y

Bạn xem lại khai báo của xy khác nhau gì nhé.
Bạn nên phân biệt đâu là kí tự và chuỗi (mảng kí tự).

1 Like

Em biết x là ký tự , y là chuỗi
nhưng vẫn không hiểu tại sao lại như thế ạ.
Mong được anh giải thích kĩ hơn ạ

Khi bác ấn enter thì nó kết thúc scanf chứ có nhận /n vào y đâu nhỉ? Trừ khi bác thiết lập để gặp kí tự nào đó khác sẽ dừng scanf chứ mặc định vẫn là ấn enter là kết thúc, cá nhân em biết là vậy. Có gì sai mong bác chỉ ra giúp em nhé.

Cho xem phần nhập/xuất cụ thể của bạn xem nào?

1 Like


Ở đây thì nhập o cho biến x xong ấn enter thì không nhập được biến y mà xuất luôn ra.
Lý do em tìm hiểu trên mạng là bởi khi nhấn enter cho lệnh scanf thứ nhất thì ký tự xuống dòng sẽ truyền cho lệnh scanf thứ 2.

Còn ở đoạn code nàythì theo như lý do trên thì đáng lẽ phải không nhập được biến y, nhưng khi chạy thử thì lại nhập được biến y ạ.

ở đây họ bảo khác bác : https://stackoverflow.com/questions/32928776/i-cant-use-two-scanf-function-to-enter-the-letters

https://en.cppreference.com/w/c/io/fscanf

All conversion specifiers other than %[ , %c , and %n consume and discard all leading whitespace characters (determined as if by calling isspace) before attempting to parse the input. These consumed characters do not count towards the specified maximum field width.

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