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
Hàm fflush(stdin) dùng để làm gì?
ý 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à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.
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 ạ
cơ mà anh không có fflush(stdin) thì nó vẫn bỏ qua đó thôi
#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’.
// 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 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 ạ