求解C语言:请用记事本创建文件org.txt,往其中写入一组已排好序的整型数列,然后再由键盘输入一个整数,要求按原来排序的规律将它插入数列中,最后将数列仍写入文件org.txt中。
例如:原来整型数列为:3 6 9 11 56 70 100(数据间的分隔符为空格)。
若将65插入数列中,则插入后数列为:3 6 9 11 56 65 70 100。
#include#include #include #define OUTPUT "org.txt" #define WIDTH 30 main(int argc,char *argv[]){ FILE* fp; char ch; int scan_in; int i,j,k,l; char c; char filedata[WIDTH][WIDTH]; char *c_data; int data_o[WIDTH],data_n[WIDTH]; for(j=0;j for(i=0;i filedata[j][i] = ' '; } } //创建org.txt文件,输入数列以空格分隔,以#号结束 if( ( fp=fopen( OUTPUT, "w" ) )==NULL ){ printf("FILE OPEN FAIL[OUTPUT] !!!n"); }else{ printf("FILE OPEN PASS[OUTPUT] !!!n"); printf("Enter the digital sequence, end with # :"); ch=getchar(); while(ch!='#'){ fputc(ch,fp);//putchar(ch); ch=getchar(); } } fclose (fp); //输入一个要插入数据 printf("input a new digital:"); scanf("%d", &scan_in ); //再打开org.txt文件 将字符型数据转成整数型 用来与新输入的数据比大小 if( ( fp=fopen( OUTPUT, " r" ) )==NULL ){ printf("FILE OPEN FAIL[OUTPUT] !!!n"); }else{ printf("FILE OPEN PASS[OUTPUT] !!!n"); i=0;j=0; while( (c = fgetc( fp )) != EOF ){ //printf( "---c = %cn", c ); filedata[j][i] = c; filedata[j][i+1] = ' '; i++; if(c == 0x20){ //0x20表示空格 i=0; j++; }else{ c_data = filedata[j];//数组指针 data_o[j] = atoi( c_data );//atoi将字符串里的数字字符转化为整形数,返回整形值。 //printf("filedata[%d]= %s n",j,filedata[j]); //printf("data_o[%d]= %d n",j,data_o[j]); } } fclose (fp); } //重新排序 //printf("---j = %dn",j); for(k=0;k<=j;k++){ if(scan_in>data_o[k]){ data_n[k]=data_o[k]; } else{ data_n[k]=scan_in; while(k<=j){ data_n[k+1]=data_o[k];k++; } break; } } //输出新数列到org.txt if( ( fp=fopen( OUTPUT, "w" ) )==NULL ){ printf("FILE OPEN FAIL[OUTPUT] !!!n"); }else{ printf("FILE OPEN PASS[OUTPUT] !!!n"); } //printf("---k = %dn",k); for(l=0;l<=k;l++){ fprintf(fp,"%d",data_n[l]); fprintf(fp,"%c",0x20); } fclose (fp); return 0; }



