读取文件中数据,再将一个数据写入文件,重新排序

文件data.txt中有一个已排好序的整数序列,main 函数中定义1个有8个元素的一维整型数组a,从data.txt文件中读入数据赋给数组a,然后从键盘输入一个整数,要按原来排序的规律将它插入数组a中,再将插入后数组a中的值写到文件data.txt中

#include <algorithm>
#include <fstream>
#include <functional>
#include <iostream>
#include <iterator>
#include <set>
#include <string>

int main()
{
    const std::string filePath("D:\\data.txt");
    using compare = std::less<int>;
    std::ifstream in(filePath);
    std::set<int, compare> data;
    std::copy(std::istream_iterator<int>(in), 
              std::istream_iterator<int>(), 
              std::inserter(data, data.begin()));
    std::copy(std::istream_iterator<int>(std::cin), 
              std::istream_iterator<int>(), 
              std::inserter(data, data.begin()));
    std::ofstream out(filePath);
    std::copy(data.begin(), data.end(), 
              std::ostream_iterator<int>(out, " "));
    return 0;
}

一个实现,供参考:


#include <stdio.h>

int main(void){
    
    FILE * fp = fopen("f:\\data.txt","r");
    
    if(fp==NULL){
        printf("文件不存在或打开失败,程序退出!\n");
        return 0; 
    }
    
    int a[8];
    int i=0;
    while(i<8){  //从文件读取8个整数到数组a 
        fscanf(fp,"%d",&a[i]);
        i++;
    }
    fclose(fp);    
    
    printf("从data.txt读取的整数如下:\n");
    for(i=0;i<8;i++){  //打印读取到的8个整数 
        printf("%d ",a[i]) ;
    } 
    printf("\n");
    
    int num;
    printf("请获入要插入的数:");
    scanf("%d",&num);  //获取要插入的数 
//    printf("num=%d\n",num);
    
    fp=fopen("f:\\data.txt","w");
    int insert=0;
    for(i=0;i<8;i++){
        
        
        if(a[0]>a[7]){ //降序 
            if(a[i]>num){    //如果数组当前的数比num大,则写入数组的数 到文件 
                fprintf(fp,"%d ",a[i]);
            }else{    
                
                if(insert==0){  //如果数组当前的数比num小或等于,并且num没有插入到文件 ,则写入num到文件 
                    fprintf(fp,"%d ",num);
                    insert=1;  //标志num已经写入文件 
                    i--;  //因为此次的num还没有操作完,所以重新再来一次,这里--往前移动一个位置,for循环的++再往后移动一个位置,则是重新操作这个位置的数一次 
                }else{  //如果当前的数比num小,并且num已经写入文件,则将数组当前的数写入文件 
                    fprintf(fp,"%d ",a[i]);
                }
            }
            
        }
        
        if(a[0]<a[7]){ //升序 
            
            if(a[i]<num){  //如果当前数组的数比num小,则写入当前数组的数到文件 
                fprintf(fp,"%d ",a[i]);
            }else{
                
                if(insert==0){  //如果当前的数比num大或等于,并且num没有写入,则写入num到文件 
                    fprintf(fp,"%d ",num);
                    //printf(" 插入num ");
                    insert=1;  //num写入标志置1,表示num已经写入 
                    i--;  //重新操作当前位置的数组的数 
                }else{   //如果当前的数比num大或等于,并且num已经写入,则写入当然数组的数到文件 
                //    printf(" 插入%d ",a[i]);
                    fprintf(fp,"%d ",a[i]);  
                }
            }            
            
        }
        
    }
    
    fclose(fp);
    
    int b[9]; 
    i=0;
    fp=fopen("f:\\data.txt","r");
    while(i<9){  //重新读取文件的数到数组 
        fscanf(fp,"%d",&b[i]);
        i++;
    }
    fclose(fp);    
    
    printf("新的data.txt数据如下:\n");
    for(i=0;i<9;i++){  //打印新的文件的数 
        printf("%d ",b[i]) ;
    } 
    printf("\n");
    fclose(fp); 
    
    return 0;
    
    
} 

img