代码文本:
#include "stdio.h"
int main(int argc,char *argv[]){
FILE *fp;
int t[21],i,j,k,n;
if(!(fp=fopen("numbers.txt","r+"))){
printf("Open the file failure, exit...\n");
return 0;
}
printf("The original sequence is as follows:\n");
for(n=0;fscanf(fp,"%d",t+n)!=EOF;n++)//读并输出
printf("%d ",t[n]);
putchar('\n');
rewind(fp);
printf("After sorting as follows:\n");
for(i=0;i<n;i++){//排序并输出
for(k=i,j=k+1;j<n;j++)
if(t[k]>t[j])
k=j;
if(k-i)
j=t[k],t[k]=t[i],t[i]=j;
printf("%d ",t[i]);//输出到屏幕
fprintf(fp,"%d ",t[i]);//输出到文件
}
putchar('\n');
fclose(fp);
return 0;
}
原文件式样:
排序后文件式样:
追问谢谢你,不过我比较纠结其中,题目所说的每个数占一行,那么我们在fscanf的时候,要注意些什么呢
追答这无关紧要。因为fscanf函数把' '和'\n'都当作数据分割符,用'\n'分隔数据的文件和用' '分隔数据的文件都能正确识别。具体说到这宗代码,在当前目录下建立一个一行一个数据的文件,代码照样能正确处理。
#include<stdio.h>
#define N 20
void main() { FILE *fp; int a[N],i,j,k;
if ( fp=fopen("numbers.txt","r") ) {
for ( i=0;i<N;i++ ) fscanf(fp,"%d",&a[i]); fclose(fp);
for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\n");
for ( i=0;i<N-1;i++ ) for ( j=i+1;j<N;j++ ) if ( a[i]>a[j] ) {k=a[i];a[i]=a[j];a[j]=k;}
for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\n");
if ( fp=fopen("numbers.txt","w") ) {
for ( i=0;i<N;i++ ) fprintf(fp,"%d\n",a[i]); fclose(fp);
} else printf("无法写文件。\n");
} else printf("无法打开文件读取数据。\n");
}