如题所述
使用文件操作函数打开文件,读取信息,进行排序,重新写入并覆盖原文件。
例程:
#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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-07-20
你可以酱紫:
# 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;
}本回答被网友采纳