lỗi nhập danh sách sinh viên bằng struct C++?

mọi người cho e hỏi e tạo 1 danh sách các sinh viên bằng truct nhưng khi nhập thì nó bị lỗi ko co nhập mssv nó bỏ qua câu lệnh của e chỉ nhập được tên với dtb thôi. e dùng hàm fflush(stdin); nhưng vẫn ko dc mong mọi người giúp ạ.

#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;

typedef struct SV
{
	char ten[30];
	char mssv[9];
	float dtb;

}SV;
void nhapn(int &n)
{
	cout << "nhap so sinh vien:";
	cin >> n;
}
void NhapSV(SV &sv)
{
	fflush(stdin);
	cout << "nhap ma sv:";
	cin.getline(sv.mssv, 9);
	fflush(stdin);
	cout << "nhap ten: ";
	cin.getline(sv.ten, 30);
	fflush(stdin);
	cout << "nhap diem tb:";
	cin >> sv.dtb;

}
void NhapdsSV(SV DS[], int n)
{
	for (int i = 0; i<n; i++)
	{
		cout << "nhap ten sv thu " << i + 1 << ":" << endl;
		NhapSV(DS[i]);
	}
}
void XuatdsSV(SV DS[], int n)
{
	for (int i = 0; i<n; i++)
	{
		cout << "\n";
		fflush(stdin);
		cout << "Sinh vien thu " << i + 1 << ": " << endl;
		cout << "Ten sinh vien: " << DS[i].ten;
		fflush(stdin);
		cout << "\nMa so sinh vien: " << DS[i].mssv;
		cout << "\nDTB=" << DS[i].dtb;
	}
}
void XuatSV(SV sv)
{
	cout << "Ma so sinh vien:" << sv.mssv << endl;
	cout << "Ten sinh vien:" << sv.ten << endl;
	cout << "Diem trung binh:" << sv.dtb << endl;
}
//Li?t kê sinh viên có đi?m trung b?nh cao nh?t l?p h?c
void Lk_dtbMax(SV DS[], int n)
{
	float max;
	max = DS[0].dtb;
	for (int i = 0; i < n; i++)
	{
		if (DS[i].dtb>max)
			max = DS[i].dtb;
	}
	cout << endl;
	cout << "sinh vien dat diem cao nhat: " << endl;
	for (int i = 0; i < n; i++)
	{
		if (DS[i].dtb == max)
		{
			cout << "ten";
			puts(DS[i].ten);
			cout << "ma sv:";
			puts(DS[i].mssv);
			cout << "diem TB=" << DS[i].dtb << endl;
		}
	}

}

int main()
{
	int n;
	SV sv;
	SV DS[100];
	nhapn(n);
	//NhapSV(sv);
	NhapdsSV(DS, n);
	XuatdsSV(DS, n);
	Lk_dtbMax(DS, n);
	system("pause");
	return 0;
}

Bạn thử thay đổi thứ tự nhập, nhập mssv rồi nhập dtb và tên

hi. mới thử xong không được bạn ơi, bỏ qua máy tính thằng bạn thì chạy dc còn bỏ qua bên máy mình thì ko dc. mình ko hiểu nó bị cái quái gì

Bạn của bạn dùng compiler gì và bạn dùng compiler gì?

tui cũng bị cái lỗi thế này.dùng visual studio 2015. nhưng mang qua codeblock hay dev c++ của máy mấy thằng bạn thì lại chạy được. chẳng biết sao lun.

Cái này do hàm fflush(stdin).Trong cuốn The C Programming Language 2nd có nói là hàm fflush() chỉ dùng với stdout để đẩy hết dữ liệu trong bộ đệm ra ngoài, còn dùng nó với stdin nhiều khi sẽ không chính xác với với 1 vài compiler. Mình thử chạy bằng GCC trên linux thì hàm không chạy được, còn bỏ lên VS2010 thì chạy bình thường :grinning: bạn thử dùng cin.ignore hoặc hàm này để xóa bộ đệm thử xem:

void cin_clear(void){
char c;
do{
c=getchar();
}while(c!='\n'&&c!=EOF);
}
1 Like

oke rồi bạn, mình sài visual 2015 ms cài dc 3 ngày gặp phải lỗi này nên mình tức quá cài lại 2013 thế là chạy ngon. đúng là cái số ko theo thời đại dc hic

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