用c语言如何读入并使文本文件按某一列排序输出?

如题所述

    使用文件操作函数打开文件,读取信息,进行排序,重新写入并覆盖原文件。

    例程:

    #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;
}

本回答被网友采纳
相似回答