Lệnh scanf trong ngôn ngữ lập trình C

vậy bạn có thể giải thích cho mình tại sao kết thúc được ko ? với lại nếu mình chèn thêm fflush (stdin);
thì sẽ thỏa mãn khi nhập g

Bạn nên gộp các cmt kiểu như

vào 1 cmt duy nhất.

Trời ạ, bạn chỉ nhập mỗi kí tự g thì phải fflush làm gì.

Tức là thế nào? Kết thúc cái gì?

cái thêm fflush mình chèn ở code thứ 2 chỉ là để mình kiểm tra enter có được tính khi ta nhập giá trị cho biến x thôi bạn, kết thúc vòng lặp đó bạn ơi

#include<stdio.h>
void main()
{
	char x;
	printf("x la ");
	do
		scanf_s("%c", &x);
	while (x == 0);
	printf("....");
}

Mình debug trong Visual Studio, không hiểu vì lý do gì mà x luôn bằng null

2 Likes

Tuy nhiên, mình tìm được một câu trả lời cho bài làm của riêng bạn tại đây: https://stackoverflow.com/questions/29502486/why-is-this-statement-printed-twice-in-while-loop/29502522#29502522
Từ đó mình đưa ra code mới chạy được cho bạn như sau (đã test):

#include<stdio.h>
void main()
{
	char x;
	printf("x la ");
	do
	{
		x = getchar();
		fflush(stdin);//Dùng để xoá '\n' khi ấn Enter mà vẫn còn trong stdin buffer
	}
	while (x == 'g');
	printf("....");
}
1 Like

ah mình nghĩ là mình hiểu rồi, khi ta nhấn g thì ở đoạn code thứ 2 và nhấn enter thì kết thúc lần nhập dữ liệu đầu tiên của hàm scanf và thỏa mãn vòng lặp, vòng lặp được thực hiện lần thứ 2, khi này kí tự nul đã được nhập vào cho biến x dẫn đến không thỏa mãn. mấy lúc trước mình đã hiểu sai.CẢM ơn Bạn.

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