#include using namespace std;int main(int argc, char **argv){int soA, soB, tong;binladen:cout > soA >> soB;tong = soA + soB;cout > c;if (c == "t"|| c=="T"){goto binladen;}return 0;}

Trong bài em đâu có fflush(stdin) đâu? Cái fflush(stdin) đúng là để xóa bộ đệm. Khi em nhập vào thì bao nhiêu ký tự cũng chui vào bộ đệm cho tới khi bộ đệm tràn.

Bạn đang xem: Việc sử dụng fflush (stdin) trong lập trình c là gì

Giả dụ em muốn nhập a b c vào. Nhưng em chỉ muốn lấy a và b

#include #include int main(){ int a,b=0,c; std::cin >> a; fflush(stdin); std::cin >> c; std::cout Bây giờ anh nhập vào như sau

1 23thì kết quả anh nhận được là

103Lý do là fflush(stdin) đã bỏ đi số 2.

Vậy dùng fflush(stdin) làm gì?

Trong một số trường hợp, nhất là khi nhập chuỗi, thì stdin (tức là standard input nhận vào từ bàn phím) nhận thừa một số ký tự. Ví dụ dấu enter xuống hàng.

Ký tự enter nếu không được xử lý bằng fflush(stdin) thì sẽ ngay lập tực bị nhập vào chuỗi tiếp theo. Dẫn đến kết quả cho chuỗi tiếp theo bị lỗi. Thường là chuỗi thứ 2 sẽ chỉ chứa một dấu enter.

Em có thể bỏ fflush(stdin) ở ví dụ trên, và nhập lại tương tự như ví dụ trên sẽ thấy kết quả ngay.


10 Likes
Bài tập về nhập xuất chuỗi. mọi người sửa lỗi sai giúp m
Honey_moon (Thực tế khắc nghiệt) November 24, 2014, 2:28pm #3

ý anh là ví dụ e nhập :

1 2 enterthì đặt fflush(stdin) ở dưới cin sẽ loại bỏ ký tự cuối đúng k a?


1 Like
minhdiem (Onethingisforever!) November 24, 2014, 2:32pm #4

hehee đúng cái em đang cần đây

*
*
*


1 Like
Honey_moon (Thực tế khắc nghiệt) November 24, 2014, 2:36pm #5

#include using namespace std;int main(int argc, char **argv){int n;nhaplain:cout > n;while (ncái này nhập lại cũng đc

*


1 Like
ltd (Lê Trần Đạt) November 24, 2014, 3:29pm #6

Không phải em, stdin có vào thì cũng có ra. Vào là lúc mình nhập số vào, ra là lúc mình cin.

Xem thêm: Lí Giải Tại Sao Samsung S7 Edge Hao Pin S7 Edge Tụt Nhanh, Lí Giải Tại Sao Samsung S7 Edge Hao Pin Nhanh

giả dụ như mình nhập vào 1 2 nhưng mình chỉ cin một lần. thì khi đó stdin vẫn còn một số, là số 2.

Có lẽ anh sẽ kéo hết tất cả những bài này sang topic khác để thảo luận cho dễ.


2 Likes
Honey_moon (Thực tế khắc nghiệt) November 24, 2014, 3:30pm #7

ok e hiểu r! tại e chưa code trên máy! bt k xài ! tks a!


ltd (Lê Trần Đạt) November 25, 2014, 9:24am #8

Thêm một ví dụ nữa nhé. Bài này mục tiêu là nhập chữ g thì yêu cầu nhập lại.

Code thì như thế này, nhưng khi nhập g tới lần thứ 2 thì không được nữa. Tại sao?

#include int main(){ char x;nhaplai: printf("\n\n\t\t *A*"); printf("\n\n\t\t *B*"); printf("nhap gia tri "); scanf("%c", &x); if(x =="g") { goto nhaplai; } getchar();}
Honey_moon (Thực tế khắc nghiệt) November 25, 2014, 3:07pm #9

*
ltd:
printf("\n\n\t\t A");printf("\n\n\t\t B");

a đạt chơi trò j đây>?

*
cái này là bắt nạt nhỏ à nha


1 Like
ltd (Lê Trần Đạt) November 25, 2014, 3:08pm #10

Haha, cái này là anh copy từ facebook, người ta viết sao anh viết thế thôi ^^


Honey_moon (Thực tế khắc nghiệt) November 25, 2014, 3:10pm #11

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


ltd (Lê Trần Đạt) November 25, 2014, 3:13pm #12

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


Honey_moon (Thực tế khắc nghiệt) November 25, 2014, 3:15pm #13

ý e là A vs B chứ này e bik r

*
! đố á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
ltd (Lê Trần Đạt) November 25, 2014, 3:16pm #14

À, 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


Honey_moon (Thực tế khắc nghiệt) November 25, 2014, 3:52pm #15

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
ltd (Lê Trần Đạt) November 25, 2014, 3:54pm #16

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 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 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)


Code không cho nhập chuỗi
Honey_moon (Thực tế khắc nghiệt) November 25, 2014, 3:58pm #17

ý 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
Xuan_Tung_Nguyen (Xuân Tùng Nguyễn) May 15, 2016, 2:09pm #18

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()


phamphuc6122002 (Phúc) July 22, 2016, 2:45pm #19

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 ạ!

*


tankhoa0000 (Nguyễn Tấn Khoa) July 22, 2016, 2:53pm #20

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

*


1 Like
next page →

Home Categories FAQ/Guidelines Terms of Service Privacy Policy

Powered by Discourse, best viewed with JavaScript enabled