关于C语言文件操作的问题

dengnice 2012-02-26 02:50:31
问题描述:一个“in.txt”格式的文件,里面有五条数据,如下:
张三 10
李四 9
王五 11
孙六 8
钱七 12

将文件中的记录按顺序排好后输出到“out.txt”文件中。
输出结果如下:
孙六 8
李四 9
张三 10
王五 11
钱七 12

这个排序问题不大会,怎么样让记录跟着数字一起排序?最好写下代码,谢谢~
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengnice 2012-02-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 luotuo44 的回复:]

代码如下。测试通过
C/C++ code

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

struct Person
{
char name[20];
int age;
};


//将读到的一行字符串分离成两部分,并存放到结构体中
void fun(const char* str, struct Person*……
[/Quote]
nice job,beautiful code,thanks
luotuo44 2012-02-26
  • 打赏
  • 举报
回复
代码如下。测试通过

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

struct Person
{
char name[20];
int age;
};


//将读到的一行字符串分离成两部分,并存放到结构体中
void fun(const char* str, struct Person* student)
{
int i =0 ;
for(i=0; str[i] != ' '; ++i)
{
student->name[i] = str[i];
}
student->name[i] = '\0';
while( ' ' == str[i] ) ++i; //去除多余的空格符

student->age = atoi(str+i);


}


//对结构体进行排序
void my_sort(struct Person* students, int start, int end)
{
if( start >= end )
{
return ;
}

int i, j;
struct Person per;
per = students[start];

i = start;
j = end;

while( i < j )
{
while( (i<j) && (students[j].age>=per.age) ) --j;
students[i] = students[j];

while( (i<j) && (students[i].age<=per.age) ) ++i;
students[j] = students[i];
}

students[i] = per;

my_sort(students, start, i-1);
my_sort(students, i+1, end);
}



void main()
{
FILE *fread = NULL, *fwrite = NULL;

fread = fopen("D:\\in.txt", "r");
fwrite = fopen("D:\\out.txt", "w");

if( (NULL == fread) || (NULL == fwrite) )
{
printf("打开文件失败\n");
return ;
}

struct Person students[5];
char str[30]; //用来存放读取的一行数据
int i = 0;
while( fgets(str, 30, fread) )
{
if( '\n' == str[0] ) //读到的是一个空行
continue;

fun(str, &students[i++]);
}

my_sort(students, 0, 4);


for(i=0; i < 5; ++i)
{
sprintf(str, "%s %d\n", students[i].name, students[i].age);
fputs(str, fwrite);
}



}
luotuo44 2012-02-26
  • 打赏
  • 举报
回复
用一个结构体数组,把读到的存放到这个结构体中。然后对这个结构体进行排序。
面包大师 2012-02-26
  • 打赏
  • 举报
回复
用结构体链表比如
struct Stu{
char Name[32];
int age;
};
dengnice 2012-02-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 udbwcso 的回复:]

用链表
[/Quote]
可是,用链表的话是自己输入人名,但是题目是给出的人名啊
dengnice 2012-02-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 udbwcso 的回复:]

用链表
[/Quote]
奥,懂了,我傻了。
dengnice 2012-02-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yuzengyuan 的回复:]

在加分就帮你做
[/Quote]
好吧,算你狠~~
尘缘udbwcso 2012-02-26
  • 打赏
  • 举报
回复
用链表
天台的故事 2012-02-26
  • 打赏
  • 举报
回复
在加分就帮你做

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧