30/09/2018, 16:10
Hàm fflush(stdin) dùng để làm gì?
#include <iostream>
using namespace std;
int main(int argc, char **argv){
int soA, soB, tong;
binladen:cout << "nhap 2 so a, b de tinh tong" << endl;
cin >> soA >> soB;
tong = soA + soB;
cout << "ket qua tong a+b = " << tong << endl;
char c = getchar();
cout << "neu mun tiep tuc nhan phim 't' + enter, thoat nhan phim bat ky" << endl;
cin >> c;
if (c == 't'|| c=='T')
{
goto binladen;
}
return 0;
}
@ltd a Đạt cái lệnh fflush(stdin) dùng để xoá ký tự đệm k mong muốn sao a?
Bài liên quan
Trong bài em đâu có
fflush(stdin)
đâu? Cáifflush(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.Giả dụ em muốn nhập
a b c
vào. Nhưng em chỉ muốn lấya
vàb
Bây giờ anh nhập vào như sau
thì kết quả anh nhận được là
Lý 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ấuenter
.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.ý anh là ví dụ e nhập :
thì đặt fflush(stdin) ở dưới cin sẽ loại bỏ ký tự cuối đúng k a?
hehee đúng cái em đang cần đây
cái này nhập lại cũng đc
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.
giả dụ như mình nhập vào
1 2<enter>
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ễ.
ok e hiểu r! tại e chưa code trên máy! bt k xài ! tks a!
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?
a đạt chơi trò j đây>? cái này là bắt nạt nhỏ à nha
Haha, cái này là anh copy từ facebook, người ta viết sao anh viết thế thôi ^^
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à tabcó 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 ! đố á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
À, 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
Nó có liên quan đến
fflush
đó @Honey_moon, vì cái hàmscanf("%c", &x);
bị dínhenter
. Nên chỉ nhập g được 1 lần, lần sauenter
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 sauscanf
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ự.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.
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 ạ!
\t là ký tự tab ngang. Nó sẽ cách ra giống như là 1 khoảng trắng bự vậy đó.
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 ạ