您的位置:首页 > 其它

文件中有一组整数,要求排序后输出到另一个文件中

2010-12-26 14:00 274 查看
文件操作+排序...

代码

#include <stdio.h>
#include <stdlib.h>
#define F_NAME_LEN 20
#define MAX_LEN 10000

/* 函数说明 */
void get_data(int *, int *); /* 返回此数组的长度 */
int sort_function(const void *, const void *); /* 排序的规则 */
void release_data(int *, int); /* 将排序后的数据输出到文件中 */

int main()
{
int src[MAX_LEN], len; /* src用于保存整数 */

get_data(src, &len);
qsort(src, len, sizeof(int), sort_function);
release_data(src, len);
}

void release_data(int *src, int len)
{
FILE *fp = NULL; /* 输出的目标文件 */
int *begin, *end;

if ((fp=fopen("dest.txt", "w")) == NULL)
{
printf("file open error!\npress any key to exit...\n");
exit(-1);
}

begin = src;
end = src + len;
while (begin != end)
{
fprintf(fp, "%d", *begin++);
fprintf(fp, "%c", ' ');
}

fclose(fp);
}

/* 从文件中读取数据 */
void get_data(int *src, int *len)
{
FILE *fp = NULL;
char fname[F_NAME_LEN], c;
int num;

printf("Enter file name:\n");
scanf("%s", fname);
getchar();
if ((fp=fopen(fname, "r")) == NULL)
{
printf("file open error!\npress any key to exit...\n");
getchar();
exit(-1);
}

num = *len = 0;
while ((c = fgetc(fp)) != EOF) /* 不断读取 */
{
if (c >= 48 && c <= 57) /* 是数字 */
{
num = num * 10 + c - 48;
}
else /* 非数字 */
{
src[(*len)++] = num;
num = 0;

while ((c = fgetc(fp)) != EOF) /* 去除数字的其余符号 */
{
if (!(c >= 48 && c <= 57))
{
continue;
}
else
{
num = num * 10 + c - 48; /* 已经读取了一位 */
break;
}
}
}
}
if (num > 0) /* 末尾可能有一位 */
{
src[(*len)++] = num;
}

fclose(fp);
}

/* 排序规则 */
int sort_function(const void *a, const void *b)
{
return *((int *)a) - *((int *)b);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐