用c语言如何读入并使文本文件按某一列排序输出?
2个回答
展开全部
使用文件操作函数打开文件,读取信息,进行排序,重新写入并覆盖原文件。
例程:
#include <stdio.h>
#include <stdlib.h>
int comp(const void* a,const void* b){
return *(int*)a-*(int*)b;
}
int main(){
FILE *p;//文件指针
int i,j,a[1000];
p = fopen("文件名称", "r");//第一个字符串是你文件路径,路径中的\要写成\\,文件名必须带后缀
for(i=0;fscanf(p,"%d",a+i)!= EOF;i++);//EOF为文件尾(end of file),读取文本中的数据
qsort(a,i,sizeof(int),comp); //由小到大排序,比较方式由comp函数指定。
fclose(p);
p = fopen("文件名称", "w");//以写入方式重新打开
for(j=0;j<i;j++) fprintf(p,"%d ",a[j]);//重新输入排序后的数据
fclose(p)
return 0;
}
展开全部
你可以酱紫:
# include <stdio.h>
int main(void)
{
FILE *p;//文件指针
char ch[1000];//1000你可以改滴~
int i = 0;
p = fopen("", "r");//第一个字符串是你文件路径,路径中的\要写成\\,文件名必须带后缀
if (!p)//如果文件打开失败,fopen返回NULL(0)
{
printf("打开文件失败!\n");
exit(-1);
}
while(ch[i-1] != EOF || i=1000)//EOF为文件尾(end of file)
{
ch[i] = getc(p);//向p指向的流中读一个字符,并将文件指针后移一位,返回值为读到的字符的ASCII码
i++;
}
//下面你就可以对数组处理了
//或者你可以处理一行,读一行.但是我不知道你想咋处理,就这样写了
return 0;
}
追问
谢谢,请问能详细说一下排序过程吗,最好有代码,比如比如text1:
2 100
1 50
3 30
变成text:
1 50
2 100
3 30
追答
要是把第二个移到第一个.这样写
# include <stdio.h>
int main(void)
{
FILE *p;//文件指针
//char ch[1000];//1000你可以改滴~
int i = 0, j[3];
p = fopen("", "r");//第一个字符串是你文件路径,路径中的\要写成\\,文件名必须带后缀
if (!p)//如果文件打开失败,fopen返回NULL(0)
{
printf("打开文件失败!\n");
exit(-1);
}
/*while(ch[i-1] != EOF || i=1000)//EOF为文件尾(end of file)
{
ch[i] = getc(p);//向p指向的流中读一个字符,并将文件指针后移一位,返回值为读到的字符的ASCII码
i++;
}*/你如果是读数,就不能酱紫//这点我为啥没注释?因为这点怕你没看见
//下面你就可以对数组处理了
//或者你可以处理一行,读一行.但是我不知道你想咋处理,就这样写了
//下面是读数的
fscanf(p, "%d%d%d", j, j+1, j+2);//p指向的流输入俩整数,存到j[0], j[1], j[2]
rewind(p);//把指针移回文件头
fprintf(p, "%d\n%d\n%d", j+1, j, j+2);//把j[1], j[0], j[2]输出到p指向的文件.
fclose(p);
关闭文件,你不写这个可以,你只要想让这程序只能运行一回//同上
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询