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

 我来答
tattackor
2015-06-09 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:867万
展开全部
  1. 使用文件操作函数打开文件,读取信息,进行排序,重新写入并覆盖原文件。

  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;
    }
文正153
2014-07-20 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:615万
展开全部

你可以酱紫:

# 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;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式