01/10/2018, 00:42

VS 2015 báo lỗi trong khi Codeblocks không báo lỗi 1 đoạn code

Hi mọi người,

Mình đang làm 1 bài tập như sau: http://codepad.org/xadGvmoA

Còn đây là source code: http://codepad.org/mReULGGn

#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>

typedef struct animal ANM; // lưu thông tin 1 con vật
typedef struct animals ANMS; // lưu thông tin nhiều con vật
void ReadFile(std::ifstream &, ANMS *); // đọc thông tin các con vật từ file cho trước
void WriteFile(std::ofstream &, ANMS *); // ghi thông tin các con vật xuống file
double RaceResult(ANM, char); // trả về thời gian hoàn thành cuộc đua của 1 con vật
void SortRank(ANMS *); // sắp xếp lại thứ tự các con vật theo mức độ con nào tới đích sớm nhất
std::ostream& operator << (std::ostream&, ANM); // định nghĩa toán tử xuất thông tin cho 1 con vật

struct animal {
	std::string m_code; // mã số con vật
	int m_speed, m_equipment; // tốc độ và trang bị (0 hoặc 1) con vật
};

struct animals {
	int n_animals; // số lượng con vật tham gia
	ANM *animals; // mảng thông tin con vật
};

std::ostream& operator << (std::ostream& os, ANM animal)
{
	os << animal.m_code << " " << animal.m_speed << " " << animal.m_equipment;
	return os;
}

void ReadFile(std::ifstream &FileIn, ANMS *a)
{
	FileIn >> a->n_animals;
	a->animals = new ANM[a->n_animals];
	for (int i = 0; i < a->n_animals; ++i)
	{
		FileIn >> a->animals[i].m_code >> a->animals[i].m_speed >> a->animals[i].m_equipment;
	}
}

double RaceResult(ANM animal, char type)
{
	if (type == 'L') // sư tử
	{
		if (animal.m_equipment == 1) // có trang bị
		{
			double time = 210.0 / (animal.m_speed * 2);
			return 9 + time;
		}
		else if (animal.m_equipment == 0) // không trang bị
		{
			double time = 210.0 / animal.m_speed;
			return 9 + time;
		}
	}
	else if (type == 'R') // thỏ
	{
		if (animal.m_equipment == 1) // có trang bị
		{
			double time = 210.0 / (animal.m_speed + 30);
			return 8 + time;
		}
		else if (animal.m_equipment == 0) // không trang bị
		{
			double time = 210.0 / animal.m_speed;
			return 8 + time;
		}
	}
	else if (type == 'T') // rùa
	{
		if (animal.m_equipment == 1) // có trang bị
		{
			double time = 135.0 / (animal.m_speed * 5);
			return 7 + time;
		}
		else if (animal.m_equipment == 0) // không trang bị
		{
			double time = 135.0 / animal.m_speed;
			return 7 + time;
		}
	}
	return 0.0;
}

void SortRank(ANMS *a)
{
	for (int i = 0; i < a->n_animals - 1; ++i)
	{
		for (int j = i + 1; j < a->n_animals; ++j)
		{
			if (RaceResult(a->animals[i], a->animals[i].m_code.at(0)) > RaceResult(a->animals[j], a->animals[j].m_code.at(0)))
				std::swap(a->animals[i], a->animals[j]);
		}
	}
}

void WriteFile(std::ofstream &FileOut, ANMS *a)
{
	int count = 0;
	for (int i = 0; i < a->n_animals; ++i)
	{
		if (RaceResult(a->animals[i], a->animals[i].m_code.at(0)) <= 12)
		{
			FileOut << ++count << ". " << a->animals[i] << std::endl;
		}
	}
}

int main()
{
	ANMS *a = new ANMS;

	std::ifstream FileIn("INPUT.txt");
	ReadFile(FileIn, a);
	FileIn.close();

	SortRank(a);

	std::ofstream FileOut("OUTPUT.txt");
	WriteFile(FileOut, a);
	FileOut.close();
	system("pause");
	return 0;
}

Khi mình compile & run đoạn code này trên VS 2015 thì nó báo 1 đống lỗi mặc dù đã clean nhiều lần:

Nhưng khi compile & run trên Codeblocks thì nó chạy bình thường, chẳng có vấn đề gì cả.

Vậy cho mình hỏi vì sao VS 2015 nó báo nhiều lỗi như thế và cách sửa!

Cảm ơn mọi người

Người bí ẩn viết 02:57 ngày 01/10/2018

Đã tìm ra lỗi: Tên của member trong struct animals trùng với tên của struct nên lỗi. Việc cần làm là sửa lại tên của member đấy cho khác với tên struct.

P/S: Haizzz, 104 views mà không có ông nào phát hiện ra, chắc thấy code hack não quá nên làm biếng bỏ qua. Mình chú thích rất rõ ràng trong code để mọi người đỡ tốn thời gian đọc - hiểu rồi cơ mà !

Bài liên quan
0