图书管理系统c语言文件无法正常显示,乱码

img

img

img


图书管理系统c语言文件无法正常显示,乱码,求速解
图书管理系统c语言文件无法正常显示,乱码,求速解

正常现象,你是二进制方式写入文件的,不是文本方式。只要程序读取文件的结果是正确的就可以了。

那我该怎么修改二进制,让文本能够正常显示阿

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7452707
  • 这篇博客也不错, 你可以看下用C语言手撸一个数组,实现数组的增删改查操作
  • 除此之外, 这篇博客: 内部排序算法效率比较,数据结构实验,C语言实现中的 各类内部排序算法代码C语言 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 
    //直接插入排序
    void InsertSort(int R[],int n) { //待排关键字存储在R[]中,默认为整型,个数为n
    	int i,j,temp;   
    	for (i=2; i<=n; ++i) {  
    		temp=R[i] ;//将待插入关键字暂存于temp中
    		j=i-1;
    		/*下面这个循环完成了从待排关键字之前的关键字开始扫描,如果大于待排关键字,则后移一位*/
    		while (j>=0&&temp<R[j]) {
    			R[j+1]=R[j] ;
    			--j;
    		}
    		R[j+1]=temp; //找到插入位置, 将temp中暂存的待排关键字插入
    	}
    }
    
    //折半插入排序
    void BInsertSort(int R[],int n) {
    	int i,j,low,high,mid,temp;
    	for(i=1; i<=n; i++) {
    		temp=R[i];
    		low=1;
    		high=i-1;
    		while(low<=high) {
    			mid=(low+high)/2;
    			if(temp>=R[mid])
    				low=mid+1;
    			else
    				high=mid-1;
    		}
    		for(j=i-1; j>=high+1; j--)
    			R[j+1]=R[j];
    		R[j+1]=temp;
    	}
    }
    
    //希尔排序
    void ShellSort(int R[],int n) {
    	int i,j,d=n/2;
    	int temp;
    	while(d) {
    		for(i=d; i<n; i++) {
    			temp=R[i];
    			for(j=i-d; j>0 && R[j]>temp; j-=d)
    				R[j+d]=R[j];
    			R[j+d]=temp;
    		}
    		d/=2;
    	}
    }
    
    //冒泡排序
    void BubbleSort(int R[],int n) { //默认待排序关键字为整型
    	int i,j, flag, temp;
    	for (i=n-1; i>=1; --i) {
    		flag=0;//变量flag用来标记本趟排序是否发生了交换
    		for(j=1; j<=i; ++j)
    			if (R[j-1]>R[j] ) {
    				temp=R[j] ;
    				R[j]=R[j-1] ;
    				R[j-1]=temp;
    				flag=1;//如果没发生交换,则flag的值为0;如果发生交换,则flag的值改为1
    			}
    		if(flag==0)//一趟排序过程中没有发生关键字交换,则证明序列有序,排序结束
    			return;
    	}
    }
    
    //快速排序
    void QuickSort (int R[], int low, int high) {	//对从R[low]到R [high]的关键字进行排序
    	int temp;
    	int i=low, j=high;
    	if (low<high) {
    		temp=R[low];
    		/*下面这个循环完成了一趟排序,即将数组中小于temp的关键字放在左边,大于temp的关键字放在右边*/
    		while(i<j) {
    			while (j>i&&R[j]>=temp) --j;//从右往左扫描, 找到一个小于temp的关键字
    			if(i<j) {
    				R[i]=R[j];//放在temp左边
    				++i;//i右移一位
    			}
    			while(i<j && R[i]<temp) ++i; //从左往右扫描,找到一个大于temp的关键字
    			if (i<j) {
    				R[j]=R[i] ;//放在temp右边
    				--j;//j左移一位
    			}
    		}
    		R[i]=temp;//将temp放在最终位置
    		QuickSort (R, low, i-1) ;//递归地对temp左边的关键字进行排序
    		QuickSort (R, i+1,high) ;//递归地对temp右边的关键字进行排序
    	}
    }
    
    //简单选择排序
    void SelectSort (int R[],int n) {
    	int i,j,k;
    	int temp;
    	for (i=1; i<=n; ++i) {
    		k=i;
    		/*这个循环是算法的关键,它从无序序列中挑出一个最小的关键字*/
    		for (j=i+1; j<n; ++j)
    			if (R[k]>R[j])
    				k=j;
    		/*下面3句完成最小关键字与无序序列第一个关键字的交换*/
    		temp=R[i];
    		R[i]=R[k];
    		R[k]=temp;
    	}
    }
    
    
    /*本函数完成在数组R[1ow]到R[high]的范围内对在位置low上的结点进行调整-----用于堆排序*/
    void Sift(int R[],int low,int high) { //这里 关键字的存储设定为从数组下标1开始
    	int i=low,j=2*i;//R[j]是R[i]的左孩子结点
    	int temp=R[i];
    	while(j<=high) {
    		if (j<high && R[j]<R[j+1])//若右孩子较大,则把j指向右孩子
    			++j;//j变为2*i+1
    		if (temp<R[j]) {
    			R[i]=R[j];//将R[j]调整到双亲结点的位置上
    			i=j;//修改i和j的值,以便继续向下调整
    			j=2*i;
    		} else
    			break;//调整结束
    	}
    	R[i]=temp;//被调整结点的值放入最终位置
    }
    /*堆排序函数*/
    void HeapSort(int R[], int n) {
    	int i;
    	int temp;
    	for (i=n/2; i>0; i--)//建立初始堆
    		Sift (R,i,n);
    	for (i=n; i>1; i--) { //进行n-1次循环,完成堆排序
    		/*以下3句换出了根结点中的关键字,将其放入最终位置*/
    		temp=R[1];
    		R[1]=R[i];
    		R[i]=temp;
    		Sift(R,1,i-1);//在减少了1个关键字的无序序列中进行调整
    	}
    }
    
    
    
    
    void merge(int R[],int R1[],int low,int mid,int high) {
    	int i=low,j=mid+1,k=low;
    	while(i<=mid&&j<=high)
    		if(R[i]<=R[j]) R1[k++]=R[i++];
    		else R1[k++]=R[j++];
    	while(i<=mid) R1[k++]=R[i++];
    	while(j<=high) R1[k++]=R[j++];
    }
    void mergepass(int R[],int R1[],int len,int n) {
    	int i=1;
    	while(i+2*len-1<=n) {
    		merge(R,R1,i,i+len-1,i+2*len-1);
    		i+=2*len;
    	}
    	if(i+len-1<n) merge(R,R1,i,i+len-1,n);
    	else
    		while(i<=n) {
    			R1[i]=R[i];
    			i++;
    		}
    }
    //二路归并排序
    void MergeSort(int R[],int n) {
    	int *R1,len=1;
    	R1=(int*)malloc(sizeof(int)*(n+1));
    	while(len<n) {
    		mergepass(R,R1,len,n);
    		len*=2;
    		mergepass(R1,R,len,n);
    		len*=2;
    	}
    }