01/10/2018, 12:13
Mọi người ơi giải thích dùm mình cái lệnh fflush(stdin) trong ct này với
//viet chuong trinh tro choi Keo-Bua-Giay//
#include <stdio.h>
void nhap( char &i,char &j);
int xet( char i, char j);
void xuat( int o);
void main()
{
char i,j;
nhap(i,j);
int o=xet(i,j);
xuat(o);
}
void nhap( char &i, char &j)
{
printf(" moi ban chon.
");
scanf("%c",&i);
(fflush(stdin)) //mình thêm ở đây//
printf(" moi ban chon.
");
scanf("%c",&j);
}
int xet(char i, char j)
{
switch(i)
{
case 'B':
{
switch(j)
{
case 'K': return 0;
break;
case 'G': return 1;
break;
case 'B': return 6;
break;
}
break;
}
case 'K':
{
switch(j)
{
case 'G':return 2;
break;
case 'B':return 3;
break;
case 'K':return 6;
break;
}
break;
}
case 'G':
{
switch(j)
{
case 'B':return 4;
break;
case 'K':return 5;
break;
case 'G':return 6;
break;
}
break;
}
default: return 7;
}
return -1;
}
void xuat( int o)
{
switch(o)
{
case 0: printf (" ban 1 thang");break;
case 1: printf (" ban 2 thang");break;
case 2: printf(" ban 1 thang");break;
case 3: printf (" ban 2 thang");break;
case 4: printf (" ban 1 thang");break;
case 5: printf (" ban 2 thang");break;
case 6: printf(" 2 ban hoa");break;
case 7: printf(" ban chon sai");break;
}
}
nếu mình không thêm lệnh fflush tại chỗ đó thì chương trình mình chạy ra ra như vậy nè:
moi ban chon.
K ( mình nhập kí tự K vào)
moi ban chon.
Press any key to continue
(không thể nhập kí tự cho dòng mời bạn chọn thứ 2 mà ấn vào phím nào là nó out lun)
có lệnh fflush thì không bị như vậy. Mấy bạn giải thích dùm mình với
Bài liên quan
Không biết bạn đã thử search trên diễn đàn chưa:
https://daynhauhoc.com/search?q=fflush(stdin)
mình cũng đọc qua rồi nhưng vẫn chưa hiểu lắm.
Bạn đọc topic này:
https://daynhauhoc.com/t/thac-mac-ve-cin-string-trong-c/49763
Topic này nói về
fflush(stdin)
. Tóm lại,fflush(stdin)
là vô dụng.nhưng trong trường hợp bài của mình phải có fflush(stdin) chương trình mới chạy đúng, cho mình hỏi tại sao vậy
Khi bạn nhập vào 1 kí tự, bạn phải nhấn Enter. Trong bộ nhớ đệm (buffer) có kí tự bạn nhập vào và kí tự
\n
sinh ra do bạn nhấn Enter. Kí tự\n
bị “lôi” sang phần đọc char ở sau, nên bạn không thể nhập tiếp kí tự vào.cái fflush(stdin) đã xóa hết mọi kí tự trong bộ nhớ đệm bao gồm kí tự K mình vừa nhập hay chỉ xóa đi kí tự \n thôi
fflush(stdin)
xoá đi những kí tự thừa ở trong buffer. Trong trường hợp này, nó sẽ xoá\n
.thanks bạn nhiều mình đã hiểu rồi. À cho mình hỏi thêm một điều ngoài lề nữa là lệnh return trong c có thể trả về một chuỗi kí tự cho hàm không. Nếu được thì mình khai báo kiểu dữ liệu trả về của hàm là gì vậy
char*
, nhưng nên hạn chế trả về chuỗi kiểu này, coi vậy chứ không dễ đâusao vậy bạn. Ví dụ như mình có chương trình nhập 3 số và xét xem 3 số đó có tạo thành loại tam giác j
nếu cứ return 0 rồi 1 rồi 2 như vậy rất khó nhớ mình return số mấy cho trường hợp nào nên mình định trả về một xâu kí tự dễ nhớ như khi là 3 số lập thành tam giác đều thì return (deu); chẳng hạn. Như vậy có thực hiện được không
Vậy thì dùng
enum
.Dùng như thế nào vậy bạn và enum là gì
Một khi bạn đã code C++ trên máy tính, vứt
stdio.h
,scanf
,printf
… điToàn những thứ phức tạp dễ lỗi.