C 언어 로 텍스트 파일 에서 데 이 터 를 읽 고 정렬 하 는 기능 을 수행 합 니 다.

기능 소개
프로그램의 기능 은 int 형 데 이 터 를 포함 한 텍스트 파일 을 외부 에서 읽 은 다음 내부 임시 배열 에 저장 하고 배열 을 정렬 한 후 지정 한 파일 에 텍스트 로 출력 하 는 것 입 니 다.int 형식의 데이터 이기 때문에 심각 한 손실 정밀도 문제 가 없습니다.
정상 실행 요구 사항:
데 이 터 를 포함 한 원본 파일 에는 숫자 와 공백 문자(빈 칸,탭 문자,줄 바 꿈 문자)를 제외 한 모든 문자 가 포함 되 어 있 지 않 습 니 다.원본 파일 은 처음에 숫자 문자 여야 합 니 다.원본 파일 의 데이터 계수 가 정확 해 야 합 니 다.파일 이름 이 유효 하도록 보증 합 니 다.
실행 결과

data.txt:

obj.txt:

전체 코드
경고:판권 소유,참고 바 랍 니 다!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

/*=============================
     :Aug 16, 2016
  by QQ:1729403632
===============================*/

#define ST 64 //     

void mergesort(int *, int);
void _mergesort(int *, int, int, int *);
void merge(int *, int, int, int, int *);
char * s_gets(char *, int);

int main(int argc, char * argv[]){
  FILE * sor, * dest; //sor    dest    
  int * ptr;//    
  int i, n; //n      
  char fname[ST]; //       

  printf("       :");
  while( scanf("%d", &n) != 1 || n <= 0 ){
    printf("    ,     !
"); while(getchar() != '
') continue; } while(getchar() != '
') continue; ptr = (int *)malloc( (size_t)n * sizeof(int) ); // ////// if(ptr == NULL){ fprintf(stderr, "FAIL TO ASK FOR MEMORY SPACE
"); exit(EXIT_FAILURE); } printf(" :"); if( s_gets(fname, ST) == NULL ){ fprintf(stderr, "Fail to get a string
"); exit(EXIT_FAILURE); } sor = fopen(fname, "r"); // if(sor == NULL){ fprintf(stderr, "Fail to open the source file
"); exit(EXIT_FAILURE); } for(i = 0; i < n; i++) // if( fscanf(sor, "%d", &ptr[i]) != 1 ){ fprintf(stderr, "Fail to get the data
"); exit(EXIT_FAILURE); } mergesort(ptr, n); // printf(" :"); if( s_gets(fname, ST) == NULL ){ fprintf(stderr, "Fail to get a string
"); exit(EXIT_FAILURE); } dest = fopen(fname, "w"); // if(dest == NULL){ fprintf(stderr, "Fail to open the destination file
"); exit(EXIT_FAILURE); } for(i = 0; i < n; i++){ // if( fprintf(dest, "%d\t", ptr[i]) < 0 ){ fprintf(stderr, "Fail to save the data
"); exit(EXIT_FAILURE); } if( ((i + 1) % 10) == 0){ // 10 if( fprintf(dest, "
") < 0 ){ fprintf(stderr, "Fail to save the data
"); exit(EXIT_FAILURE); } } } if( fclose(sor) != 0 ){ // fprintf(stderr, "Fail to close the source file
"); exit(EXIT_FAILURE); } if( fclose(dest) != 0 ){ // fprintf(stderr, "Fail to close the destination file
"); exit(EXIT_FAILURE); } free(ptr); // printf(" !
^ ^\b\b"); getch(); return 0; } void mergesort(int * ar, int size){ if(size > 0){ int * temp; temp = (int *)malloc( (size_t)size * sizeof(int) ); ///// if(temp == NULL){ fprintf(stderr, "Fail to ask for MEMORY SPACE
"); exit(EXIT_FAILURE); } _mergesort(ar, 0, size - 1, temp); // free(temp); } } void _mergesort(int * ar, int start, int end, int * temp){ if(start < end){ int mid = (start + end) / 2; _mergesort(ar, start, mid, temp); // _mergesort(ar, mid + 1, end, temp); // merge(ar, start, mid, end, temp); // } } void merge(int * ar, int p, int q, int r, int * temp){ int i = p, j = q + 1, k = 0; while(i <= q && j <= r){ if(ar[i] < ar[j]) temp[k++] = ar[i++]; else temp[k++] = ar[j++]; } while(i <= q) // [i...q] , temp[k++] = ar[i++]; while(j <= r) // [j...r] , temp[k++] = ar[j++]; for(k = 0; k <= (r - p); k++) ar[p + k] = temp[k]; } char * s_gets(char * st, int size){ char * re; int i = 0; re = fgets(st, size, stdin); if(re){ while(st[i] != '
' && st[i] != '\0') // i++; // if(st[i] == '
') // '
' st[i] = '\0'; // '\0' else // while(getchar() != '
') // ( ) continue; } return re; }
총결산
이상 은 C 언어 로 텍스트 파일 에서 데 이 터 를 읽 고 정렬 하 는 기능 을 수행 하 는 모든 내용 입 니 다.이 글 을 읽 고 여러분 이 직접 디 버 깅 을 실행 하면 C 언어 를 배 우 는 친구 들 에 게 도움 이 될 것 이 라 고 믿 습 니 다.

좋은 웹페이지 즐겨찾기