01/10/2018, 10:04
Phải xử lí lỗi này sao ạ, đọc tập tin và lưu thông tin vào Mảng bằng con trỏ
Bác nào có thể giúp em tại sao có đường dài chạy khắp chương trình khi chạy được không ạ, cách sửa nó thì phải làm sao ạ (Thầy em chỉ rồi em không nhớ cách sửa lại )
tập tin txt của em có dạng


#include<conio.h>
#include<stdio.h>
#include <time.h>
#include <string>
#include<iostream>
using namespace std;
typedef struct _sinhvien {
char strTen[100];
char strMaso[100];
float diemToan;
float diemLy;
float diemHoa;
}SinhVien;
void docDanhSachSinhVien(SinhVien * p, const int numSinhVien, const char * filename)
{
}
void chuanHoaSinhVien(char *str, SinhVien &sv) {
char *pch;
pch = strtok(str, ";");
int i = 0;
while (pch != NULL) {
char tmpBuffer[100];
strncpy(tmpBuffer, pch, strlen(pch));
if (0 == i) {
memset(sv.strTen, 0, 100);
strncpy(sv.strTen, tmpBuffer, strlen(tmpBuffer));
}
else if (1 == i) {
memset(sv.strMaso, 0, 100);
strncpy(sv.strMaso, tmpBuffer, strlen(tmpBuffer));
}
else if (2 == i) {
sv.diemToan = (float)atof(pch);
}
else if (3 == i) {
sv.diemLy = (float)atof(pch);
}
else if (4 == i) {
sv.diemHoa = (float)atof(pch);
}
pch = strtok(NULL, ";");
i = i + 1;
}
}
void docDanhSachSinhvien(SinhVien *p, const int numSinhVien, char * filename) {
FILE *fb;
size_t len = 0;
fb = fopen(filename, "r");
if (fb == NULL) {
cout << "Khong the doc file" << filename << endl;
exit(-1);
}
char line[100];
int i = 0;
while ((fgets(line, sizeof(line), fb)) != NULL) {
chuanHoaSinhVien(line, p[i]);
i = i + 1;
}
cout << endl;
fclose(fb);
}
void xuatSinhVien(SinhVien sv) {
cout << "Ten: " << sv.strTen << " , ma so: " << sv.strMaso
<< ", diem Toan: " << sv.diemToan
<< ", diem Ly: " << sv.diemLy
<< ", diem Hoa: " << sv.diemHoa << endl;
}
float tinhTongDiem(SinhVien sv) {
return (sv.diemToan + sv.diemLy + sv.diemHoa);
}
int timSinhVienTongDiemCaoNhat(SinhVien *p, const int numSinhVien) {
int max_index = 0;
for (int i = 1; i < numSinhVien; i++) {
if (tinhTongDiem(p[i]) > tinhTongDiem(p[max_index])) {
max_index = i;
}
}
return max_index;
}
void hoanViSinhVien(SinhVien &a, SinhVien &b) {
SinhVien tmp = a;
a = b;
b = tmp;
}
void sapXepSinhVien(SinhVien *p, const int numSinhVien) {
for (int i = 0; i < numSinhVien - 1; i++) {
int min_index = i;
for (int j = i + 1; j < numSinhVien; j++) {
if (tinhTongDiem(p[j]) < tinhTongDiem(p[min_index])) {
min_index = j;
}
}
if (min_index != i) {
hoanViSinhVien(p[i], p[min_index]);
}
}
}
void docDanhSachSinhVien(SinhVien *p, const int numSinhVien, const char* filename);
void chuanHoaSinhVien(char *str, SinhVien &sv);
void xuatSinhVien(SinhVien sv);
float tinhTongDiem(SinhVien sv);
void hoanViSinhVien(SinhVien &a, SinhVien &b);
void sapXepSinhVien(SinhVien *p, const int numSinhVien);
int timSinhVienTongDiemCaoNhat(SinhVien *p, const int numSinhVien);
int main(int argc, char *argv[]) {
int const numSinhVien = 10;
SinhVien *pSinhVien = (SinhVien*)malloc(numSinhVien * sizeof(SinhVien));
if (pSinhVien != NULL) {
docDanhSachSinhVien(pSinhVien, numSinhVien, "sinhvien.txt");
for (int i = 0; i < numSinhVien; i++) {
xuatSinhVien(pSinhVien[i]);
}
int index = timSinhVienTongDiemCaoNhat(pSinhVien, numSinhVien);
cout << "Sinh vien co tong diem cao nhat tai vi tri la"
<< index << endl;
xuatSinhVien(pSinhVien[index]);
cout << "Mang sinh vien sau khi sap xep" << endl;
sapXepSinhVien(pSinhVien, numSinhVien);
for (int i = 0; i < numSinhVien; i++) {
xuatSinhVien(pSinhVien[i]);
}
}
if (pSinhVien != NULL) {
free(pSinhVien);
pSinhVien = NULL;
}
_getch();
}
Bài liên quan