Em có đề bài như sau:
Sắp xếp thí sinh trong file theo tổng điểm giảm dần.
Mỗi thí sinh gồm các thông tin. Họ và tên, Ngày sinh, điểm 1, điểm 2, điểm 3.
File dữ liệu vào:
Dòng 1 ghi số thí sinh.
Mỗi thí sinh ghi trên 5 dòng theo thứ tự: Họ và tên, ngày sinh, điểm 1, điểm 2, điểm 3.
File dữ liệu ra yêu cầu in ra danh sách các thí sinh đã sắp xếp.

Sau đây là code của em.
Mã:
#include<conio.h>
#include<stdio.h>
#include<string.h>
FILE *f1=fopen("SAP XEP.INP","rt");
FILE *f2=fopen("SAP XEP.OUT","w");
struct SV{
	int STT;
	char Ten[25],SN[10];
	float D1,D2,D3,T;
};
void Doivt(SV &s1, SV &s2){
	SV Temp;
	Temp=s2;
	s2=s1;
	s1=Temp;
}
main(){
	int t,i,j;
	fscanf(f1,"%d",&t);
	SV S[t];
	for(i=0;i<t;i++){
		S[i].STT=i+1;
		fscanf(f1,"%s",&S[i].Ten);
		fflush(stdin);
		fscanf(f1,"%s",&S[i].SN);
		fscanf(f1,"%f",&S[i].D1);
		fscanf(f1,"%f",&S[i].D2);
		fscanf(f1,"%f",&S[i].D3);
		S[i].T=S[i].D1+S[i].D2+S[i].D3;
	}
	for(i=0;i<t;i++)
		for(j=i+1;j<t;j++)
			if(S[i].T<S[j].T) Doivt(S[i],S[j]);
	for(i=0;i<t;i++){
		fprintf(f2, "%d  %s  %10s  %f
",S[i].STT,S[i].Ten,S[i].SN,S[i].T);
	}
	fclose(f1);
	fclose(f2);
}
File dữ liệu vào:
Mã:
3
Pham Van Phong
12/12/1994
3.5
7.0
5.5
Tran Da Huong
30/11/1994
7.5
9.5
9.5
Dinh Cong Manh
7/7/1992
4.5
4.5
5.0
Kết quả dữ liệu file ra:
Mã:
1  Pham         Van  777324291989230220000000000000000.000000
2  Phong  12/12/1994  5.333333
3  Tran          Da  0.000000
Nhưng khi file dữ liệu vào là:
Mã:
3
Phong
12/12/1994
3.5
7.0
5.5
Huong
30/11/1994
7.5
9.5
9.5
Manh
7/7/1992
4.5
4.5
5.0
Kết quả file ra lại là:
Mã:
2  Huong  30/11/1994  8.833333
1  Phong  12/12/1994  5.333333
3  Manh    7/7/1992  4.666667
Cho em hỏi tại sao em không thể lấy toàn bộ Họ và Tên của 1 thí sinh (Nếu lấy toàn bộ họ tên thí sinh thì kết quả sai). AI cso cách khắc phục không?

- - - Nội dung đã được cập nhật ngày 25-05-2014 lúc 09:48 PM - - -

Giúp em phát nào các anh