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 언어 를 배 우 는 친구 들 에 게 도움 이 될 것 이 라 고 믿 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.