Chào mọi người.
Em đang viết một chương trình C nhập vào họ tên từ bàn phím và lưu danh sách ra file, ( có thể nhập tiếp tục ghi thêm vào cuối file) sau đó sắp xếp và in ra màn hình. Khi em chạy chương trình thì bị lỗi runtime. Mọi người giúp em với ạ. Đây là code của em:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5000
char *subString(char *string, int position, int endstr);
//Lấy tên từ họ tên đầy đủ
char *getName(char* fullName);
//đếm số dòng đã nhập trong file
int countLines(char *filename);
void sortByVietnam();
void nhapDanhSach();
int main(){
nhapDanhSach();
sortByVietnam();
return 0;
}
void nhapDanhSach(){
int i=0;
char danhSach[5000][30];
FILE *fp;
fp=fopen("D:\\danhsach.txt", "a+");
//Nhap danh sach.
i= countLines(fp);
while(i<5000){
printf("Nhap ho ten sinh vien thu %d:", i+1);
gets(danhSach[i]); fflush(stdin);
if(danhSach[i][0]=='\0')
break;
fprintf(fp,"%s\n", danhSach[i]);
i++;
}
fclose(fp);
};
void sortByVietnam(){
char name[5000][30], danhSach[5000][30], *tg;
int i=0, j=0;
FILE* fp = fopen("D:\\danhsach.txt", "r");
//read file input assign to danhsach
while (fgets(danhSach[i], 30 , fp)){
i++;
}
int n=strlen(danhSach);
for(i=0; i< n; i++){
strcpy(name[i], getName(danhSach[i]));
}
for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(strcmp(name[i], name[j])>0){
strcpy(tg, danhSach[i]);
strcpy(danhSach[i], danhSach[j]);
strcpy(danhSach[j], tg);
}
if(strcmp(name[i],name[j])==0&&strcmp(danhSach[i], danhSach[j])>0){
strcpy(tg, danhSach[i]);
strcpy(danhSach[i], danhSach[j]);
strcpy(danhSach[j], tg);
}
}
}
printf("\nDanh sach sap xep kieu Viet Nam:\n");
for(i=0; i<n; i++){
printf("%d . %s\n", i+1, danhSach[i]);
}
};
char *subString(char *string, int start, int endstr){
int c, length;
length = endstr-start+1;
char *pointer = (char*)malloc(sizeof(char)*(length+1));
for (c = 0 ; c < start ; c++)
string++;
for (c = 0 ; c < length; c++){
*(pointer+c) = *string;
string++;
}
*(pointer+c)= '\0';
return pointer;
}
char *getName(char* fullName){
char*name;
int i, n =strlen(fullName);
for(i= n-1; i>0; i--){
if(fullName[i]==' '){
name=(subString(fullName, i+1, n-1));
break;
}
}
return name;
};
int countLines(char* filename){
FILE *fp=NULL;
fp=fopen("D:\\danhsach.txt", "r");
char str[MAX+1];
int numLine;
numLine = 0;
while( fgets(str, MAX, fp)!= NULL ){
numLine++;
}
return numLine;
}