Code giống như bị trôi lệnh string khi xuất? Chạy bằng VS2013 thì bình thường nhưng qua VS2015 thì xuất hiện lỗi

Em tạo 2 class Student.h, ArrayListStudent để nhập danh sách sinh viên rồi sắp xếp theo điểm ạ lúc chạy bên VS2013 thì bình thường chuyển qua 2015 thì mắc lỗi này ạ , em thử nhập 1 sinh viên rồi xuất thì lại bình thường nhưng danh sách thì lại lỗi ạ
*** Dưới đây là code với lỗi ạ

#pragma once
#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
	string sFullName;
	string sMSSV;
	float fMark;

public:
	void Input();
	float getfMark();
	void Output();
	Student();
	~Student();
};


#pragma once
#include "Student.h"
#include <vector>
class ArrayListStudent
{
private:
	vector <Student> ListStudent;
public:
	void KhoiTao(int n) {
		ListStudent.resize(n);
	}
	void InputArray(int n);
	void OutputArray(int n);
	void Sort();
	ArrayListStudent();
	~ArrayListStudent();
};

           // *** Student.cpp
#include "Student.h"
#include <string>
void Student::Input() {

	cout << "Ho ten: ";
	getline(cin, sFullName);
	cin.clear();
	cin.ignore();
	cout << "MSSV: ";
	getline(cin, sMSSV);
	cin.clear();
	cin.ignore();
	cout << "Diem tong ket: ";
	cin >> fMark;
	

}
void Student::Output() {

	cout << "Ho ten: " << sFullName << endl;
	cout << "MSSV: " << sMSSV << endl;
	cout << "Diem tong ket: " << fMark << endl;
	cout << "-------------------" << endl;
}
float Student::getfMark() {
	return fMark;
}
Student::Student()
{
}


Student::~Student()
{
}

          // *** ArrayListStudent.cpp
#include "ArrayListStudent.h"
#include "Student.h"
void ArrayListStudent::Sort(){
	for (int i = 0; i < ListStudent.size()-1; i++){
		for (int j = i+1; j < ListStudent.size(); j++){
			if (ListStudent.at(i).getfMark()>ListStudent.at(j).getfMark()){
				Student temp = ListStudent.at(i);
				ListStudent.at(i) = ListStudent.at(j);
				ListStudent.at(j) = temp;
			}
		}
	}

}
void ArrayListStudent::InputArray(int n){
	for (int i = 0; i < n; i++){
		ListStudent[i].Input();
	}

}
void ArrayListStudent::OutputArray(int n){
	for (int i = 0; i < n; i++){
		ListStudent[i].Output();
	}

}
ArrayListStudent::ArrayListStudent()
{
}


ArrayListStudent::~ArrayListStudent()
{
}


#include "Student.h"
#include "ArrayListStudent.h"
#include <vector>
void main() {
	int n;
	cout << "So sinh vien can nhap :";
	cin >> n;
	ArrayListStudent lstStu;
	lstStu.KhoiTao(n);

	lstStu.InputArray(n);
	lstStu.Sort();
	cout << "==================================" << endl;
	lstStu.OutputArray(n);

	system("pause");

}

Vui lòng định dạng mã của bạn:

1 Like

chỉ nên xài cin.ignore sau cin >> fMarkcin >> n thôi, xài sau getline thì ko đúng vì getline nó clear sẵn ký tự xuống dòng rồi

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