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

HK boy viết 14:27 ngày 01/10/2018

Không biết bạn đã thử search trên diễn đàn chưa:

https://daynhauhoc.com/search?q=fflush(stdin)

Hà Hải Long viết 14:21 ngày 01/10/2018

mình cũng đọc qua rồi nhưng vẫn chưa hiểu lắm.

HK boy viết 14:24 ngày 01/10/2018

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.

Hà Hải Long viết 14:18 ngày 01/10/2018

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

HK boy viết 14:29 ngày 01/10/2018

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.

Hà Hải Long viết 14:25 ngày 01/10/2018

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

HK boy viết 14:23 ngày 01/10/2018

fflush(stdin) xoá đi những kí tự thừa ở trong buffer. Trong trường hợp này, nó sẽ xoá \n.

Hà Hải Long viết 14:26 ngày 01/10/2018

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

rogp10 viết 14:21 ngày 01/10/2018

char*, nhưng nên hạn chế trả về chuỗi kiểu này, coi vậy chứ không dễ đâu

Hà Hải Long viết 14:24 ngày 01/10/2018

sao 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

#include<stdio.h>
void nhap( float &a, float &b, float &c);
int xet( float a, float b, float c);
void xuat( int kt);
void main()
{
	float a,b,c;
	int kt;
	nhap( a,b,c);
	kt= xet(a,b,c);
	xuat( kt);
}
void nhap(float &a, float &b, float &c)
{ scanf("%f%f%f", &a,&b,&c);
}
int xet( float a, float b, float c)
{
	if((a==b)&&(a==c))
		return(0);
	else if((a==b)||(a==c)||(b==c))
		if ((c*c==b*b+a*a)||(a*a==b*b+c*c)||(b*b==a*a+c*c))
			return(1);
		else 
			return(2);
	else if((c*c==b*b+a*a)||(a*a==b*b+c*c)||(b*b==a*a+c*c))
		return(3);
	else 
		return(4);
}
void xuat( int kt)
{
	if(kt==0)
		printf("la tam giac deu");
	if(kt==1)
		printf("tam giac vuong can");
	if(kt==2)
		printf("tam giac can");
	if(kt==3)
		printf(" tam giac vuong");
	if(kt==4)
		printf(" tam giac thuong");
}

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

rogp10 viết 14:28 ngày 01/10/2018

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ớ

Vậy thì dùng enum.

Hà Hải Long viết 14:24 ngày 01/10/2018

Dùng như thế nào vậy bạn và enum là gì

HK boy viết 14:16 ngày 01/10/2018

Dùng như thế nào vậy bạn và enum là gì

Chào các bạn đang theo dõi khóa học lập trình trực tuyến ngôn ngữ C++. Trong bài học ngày hôm nay, chúng ta sẽ cùng tìm hiểu về từ khóa enum, cách sử dụng, và quan trọng nhất là tại sao chúng ta sử dụng enum trong ngôn ngữ C++. Enumarated types Kiểu liệt kê là một trong số các kiểu dữ liệu do người lập trình tự định nghĩa. Tại sao chúng ta cần định nghĩa kiểu dữ liệu mới? Trong quá trình lập trình, những kiểu dữ liệu được định nghĩa sẵn trong ngôn ngữ lập trình có thể không mang lại ý nghĩa …
Trần Hoàn viết 14:28 ngày 01/10/2018

Một khi bạn đã code C++ trên máy tính, vứt stdio.h, scanf, printf… đi
Toàn những thứ phức tạp dễ lỗi.

Bài liên quan
0