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

文件操作+排序...

代码
 
      
#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);
}

 

posted on 2010-12-26 14:00 PeckChen 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/xyoung/archive/2010/12/26/1917164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值