Xóa bộ nhớ đệm trong C

em đã có câu lệnh fflush(stdin);
Nhưng khi chạy chương trình thì nó không cho em nhập tên môn học ạ
http://codepad.org/TRS40LFk

Up lại code
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/*
Viết chương trình nhập vào thông tin sinh viên , biết rằng sinh viên gồm các thông tin:
Mã số :
Họ tên:
Danh sách các môn học trong học kỳ đó kèm theo số tín chỉ tương ứng 

=> yêu cầu: tính điểm trung bình và xếp loại sinh viên theo quy tắc



*/

struct monhoc
{
	char tenmon[30];
	float sodiem;
	int sochi;
};
typedef struct monhoc MONHOC; // thay vì gọi struct monhoc => rút gọn lại thành MONHOC

struct danhsachmonhoc
{
	int n;
	MONHOC *arr;
};
typedef struct danhsachmonhoc DANHSACHMONHOC;

void nhapmonhoc(MONHOC &mh)
{
	
	printf("\nNhap vao ten mon hoc: ");
	fflush(stdin); // xóa bộ nhớ đệm
	gets_s(mh.tenmon);

	do
	{
		printf("\nNhap vao so diem: ");
		scanf("%f", &mh.sodiem);

		if (mh.sodiem < 0 || mh.sodiem > 10)
		{
			printf("\nXin vui long nhap so diem phu hop!");
		}
	} while (mh.sodiem < 0 || mh.sodiem > 10);

	do {
		printf("\nNhap vao so tin chi: ");
		scanf("%d", &mh.sochi);

		if (mh.sochi < 0)
		{
			printf("\nXin vui long nhap lai so tin chi phu hop!");
		}	
	} while (mh.sochi < 0);
}

void xuatmon(MONHOC mh)
{
	printf("\nTen mon hoc: %s", mh.tenmon);
	printf("\nDiem thi: %.1f", mh.sodiem);
	printf("\nSo tin chi: %d", mh.sochi);
}

void nhapdanhsachmonhoc(DANHSACHMONHOC &ds)
{
	do {
		printf("\nNhap so luong mon hoc: ");
		scanf("%d", &ds.n);

		if (ds.n < 0)
		{
			printf("\nXin vui long nhap so mon hoc phu hop");
		}
	} while (ds.n < 0);
	ds.arr = (MONHOC *)malloc(ds.n * sizeof(MONHOC));
	for (int i = 0; i < ds.n; i++)
	{
		printf("\n------------ Nhap vao mon hoc thu %d ---------------\n", i + 1);
		nhapmonhoc(ds.arr[i]);
	}
}

void xuatdanhsachmonhoc(DANHSACHMONHOC ds)
{
	for (int i = 0; i < ds.n; i++)
	{
		printf("\n------------ Mon hoc thu %d ---------------\n", i + 1);
		xuatmon(ds.arr[i]);
	}
}

int main()
{
	DANHSACHMONHOC ds;
	nhapdanhsachmonhoc(ds);
	xuatdanhsachmonhoc(ds);
	
	free(ds.arr);
	_getch();
	return 0;
}
void nhapmonhoc(MONHOC &mh)

Cái này là gì vậy bạn. :slight_smile:

void nhapdanhsachmonhoc(DANHSACHMONHOC &ds)

Đây nữa.

Chẳng hiểu bạn đang code C hay C++ nữa. :smile:

Yêu cầu bạn sửa lại code, còn không mình cũng chịu thôi. :slight_smile:

3 Likes

Mình xem qua code bạn thì thấy bạn đặt tên biến hơi dài :smiley: với phần typedef là để gõ lại cho nhanh thì bạn để như cũ mà lại còn viết hoa, phần nhập tenmon của bạn có lẽ nên dùng fgets thì hơn vì nó lấy được cả khoảng trắng hoặc dùng scanf("%[^\n]%*c",<biến char>)

2 Likes

nó truy xuất vào struct thôi ạ :frowning:

vâng ạ . Nhưng khó hiểu ở cái là nó không cho mình nhập tên môn mà nhảy xuống nhập điểm luôn trong khi mình đã có xóa bộ nhớ đệm rồi ạ

Câu fflush(stdin) giờ Visual Studio nó còn chê mà :smiley:

3 Likes

thế dùng câu nào ạ :frowning: . em đang dùng visual đây ạ

Bạn dùng getchar() đọc hết từ buffer ra là đc.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?