C语言,文件操作编程题,请教一下这个程序该怎么写?

要求如图

代码文本:

#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'分隔数据的文件和用' '分隔数据的文件都能正确识别。具体说到这宗代码,在当前目录下建立一个一行一个数据的文件,代码照样能正确处理。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-07

#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");

}

相似回答