Hàm fflush(stdin) dùng để làm gì?

a đạt giải thích e 2 dòng print đó coi! ngao ngán quá! chứ code bỏ 2 dòng đó đi thì bt e vẫn làm

\n là xuống hàng
\t là tab
có nghĩa là xuống hàng xuống hàng tab tab đấy @Honey_moon

ý e là A vs B chứ này e bik r :frowning: ! đố ác nhé! chẳng lẽ bắt e lên google ông anh chơi kỳ! lớn rồi còn ham khoe khoang

1 Like

À, A với B thì là chữ bình thường thôi. Chắc người làm bài đó họ viết ví dụ thôi. hehehe

e trả lời theo suy đoán của e! a khai báo kiểu char! sau đó a tới địa chỉ với & vì thế nó đã xác định địa chỉ trên thanh ram rồi cho nên ko thể nhập lại 1 biến nữa vs cùng địa chỉ cấp phát

1 Like

Nó có liên quan đến fflush đó @Honey_moon, vì cái hàm scanf("%c", &x); bị dính enter. Nên chỉ nhập g được 1 lần, lần sau enter chui vào x, dẫn đến thoát chương trình.

Cách giải quyết là thêm fflush(stdin) vào sau scanf

#include <stdio.h>

int main()
{
    char x;
nhaplai:
    printf("\n\n\t\t *A*");
    printf("\n\n\t\t *B*");
    printf("nhap gia tri ");
    scanf("%c", &x);
    fflush(stdin);
    if(x =='g')
    {
        goto nhaplai;
    }
    getchar();
}

Tuy nhiên dây cũng không phải là cách tốt nhất. Cách tốt nhất là dùng getchar() để nhập 1 ký tự.

#include <stdio.h>

int main()
{
    char x;
nhaplai:
    printf("\n\n\t\t *A*");
    printf("\n\n\t\t *B*");
    printf("nhap gia tri ");
    x = getchar();
    if(x =='g')
    {
        goto nhaplai;
    }
    getchar();
}

Như thế này mình không cần fflush(stdin)

ý anh là dùng do while rồi getchar thôi! đk là !=g ; có clip a hướng dẫn nhập trong mảng ký tự rồi ! thế e cứ tưởng cao siêu lắm! làm nghĩ mún nát óc! hại não về đêm.

1 Like

Nếu đặt getchar() ở cuối thì chưa kịp thi hành đã bị goto nhập lại rồi. getchar() phải đặt ngay dưới x=getchar()

Anh Đạt cho em hỏi /t dùng làm gì ạ?
Hi vọng em lấy mấy topic cũ ra không làm phiền mọi người ạ! :slight_smile:

\t là ký tự tab ngang. Nó sẽ cách ra giống như là 1 khoảng trắng bự vậy đó. :wink:

1 Like

Vâng em cảm ơn anh ạ, tạm em đang bắt đầu học C++ do có việc bận nên chưa có thời gian ạ :slight_smile:

1 Like

cơ mà anh không có fflush(stdin) thì nó vẫn bỏ qua đó thôi :smile:

#include
#include <stdio.h>

int main()
{
int a,b=0,c;
std::cin >> a;
fflush(stdin);
std::cin >> c;
std::cout << a << b << c;
return 0;
} //em làm theo lời anh bỏ fflush(stdin) nhập lại "1 2 " và “3” thì vẫn như lúc có fflush(stdin) đấy thôi … chả hiểu cái chỗ này luôn ^^ nghe rất nhiều thầy cô nói rồi nhưng em không biết là thầy cô có hiểu thật sự hay là không hiểu … ??! rất mong anh có 1 bài giải đáp tường tận về vấn đề này

Nhập toàn số thì không cần. Với lại lệnh này là sai.

Em nghĩ là '\n' khác 'g' anh ơi :slight_smile: 

Anh ơi lệnh nào là đúng ạ ?

Thực ra lệnh flush sinh ra để ghi chứ không phải để đọc và VS cũng bỏ luôn rồi. Bạn sẽ dùng getchar() để lấy bớt kí tự ‘\n’.

1 Like
// Lấy '\n' từ stdin (bộ đệm)
char x = getchar();

// Nhập lại cho biến x
scanf("%c", &x);

Trong VS dùng std::cin.ignore(256, ‘\n’); đúng không ạ ?

C++ thì đúng :slight_smile: nhưng nên hiểu câu đó là “bỏ qua 256 kí tự ‘\n’”.

Có nghĩa là “Bỏ qua 256 lần ký tự \n” phải không ạ

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