1. 程式人生 > >C primier plus 檔案的輸入/輸出

C primier plus 檔案的輸入/輸出

程式設計練習第十二題,圖形輸出。

本題我用隨機函式rand()產生隨機數,進行檔案的輸入輸出操作。僅供參考。

#include<stdio.h>
#include<stdlib.h>
#define ROWS 20
#define COLS 30

int main(void)
{
	FILE *fp;
	int i,j,n=0;
	int rand_number[ROWS][COLS];
	int numbers[ROWS][COLS];
	char crt[10]={' ','!','@','#','$','%','^','&','*','~'};
    
	//隨機產生數字
	for(i=0;i<ROWS;i++)
		for(j=0;j<COLS;j++)
			rand_number[i][j]=rand()%9+1;
	printf("The rand numbers is here: \n");

	//編譯輸出到螢幕
	for(i=0;i<ROWS;i++)
		for(j=0;j<COLS;j++)
		{
			printf(" %d",rand_number[i][j]);
			n++;
			if(n==30)
			{
				putchar('\n');
				n=0;
			}
		}

	//編譯輸出到檔案中
     if((fp=fopen("files.txt","w"))==NULL)
	 {
		 fprintf(stderr,"The file is not exist.");
		 exit(EXIT_FAILURE);
	 }
     for(i=0;i<ROWS;i++)
		 for(j=0;j<COLS;j++)
		 {
			 fprintf(fp," %d",rand_number[i][j]);
			 n++;
			 if(n==30)
			 {
				 fprintf(fp,"\n");//寫入檔案時的換行。
				 n=0;
			 }
		 }
     if(fclose(fp)!=0)
		 fprintf(stderr,"Error in closing files\n");
	 //一個檔案開啟來完成一個任務後,要隨即關閉該檔案。才可以再次開啟檔案進行下一個任務操作!!!


	//再從建立的檔案中讀出資料。
	 if((fp=fopen("files.txt","r"))==NULL)
	 {
		 fprintf(stderr,"The files is not open.");
		 exit(EXIT_FAILURE);
	 }
	 printf("Here is get numbers in files.txt:\n");
	 /*從檔案讀出到螢幕上面*/
     for(i=0;i<ROWS;i++)
		 for(j=0;j<COLS;j++)
			 fscanf(fp,"%d",&numbers[i][j]);
	 for(i=0;i<ROWS;i++)
		 for(j=0;j<COLS;j++)
		 {
			 printf(" %d",numbers[i][j]);
			 n++;
			 if(n==30)
			 {
				 putchar('\n');
				 n=0;
			 }
		 }
	 /*此時檔案的資料已經讀出到numbers數組裡面了,這時再給數字賦字元。*/
	 printf("Here is graphics from numbers:\n");
	 for(i=0;i<ROWS;i++)
		 for(j=0;j<COLS;j++)
		 {
			 if(0==numbers[i][j])
				 numbers[i][j]=crt[0];
			 if(1==numbers[i][j])
				 numbers[i][j]=crt[1];
			 if(2==numbers[i][j])
				 numbers[i][j]=crt[2];
			 if(3==numbers[i][j])
				 numbers[i][j]=crt[3];
			 if(4==numbers[i][j])
				 numbers[i][j]=crt[4];
			 if(5==numbers[i][j])
				 numbers[i][j]=crt[5];
			 if(6==numbers[i][j])
				 numbers[i][j]=crt[6];
			 if(7==numbers[i][j])
				 numbers[i][j]=crt[7];
			 if(8==numbers[i][j])
				 numbers[i][j]=crt[8];
			 if(9==numbers[i][j])
				 numbers[i][j]=crt[9];
		 }
	  for(i=0;i<ROWS;i++)
		  for(j=0;j<COLS;j++)
		   {
			   printf(" %c",numbers[i][j]);
			   n++;
			   if(n==30)
			   {
				   putchar('\n');
				   n=0;
			   }
		   }
	  if(fclose(fp)!=0)
		 fprintf(stderr,"Error in closing files\n");

      //輸出的字元圖形輸出到建立的檔案中
	  if((fp=fopen("files.txt","a"))==NULL)//a為在已有的檔案中追加內容。
        {
		    fprintf(stderr,"The files is not open.");
            exit(EXIT_FAILURE);
        }
      for(i=0;i<ROWS;i++)
		 for(j=0;j<COLS;j++)
		 {
			 fprintf(fp," %c",numbers[i][j]);
			 n++;
			 if(n==30)
			 {
				 fprintf(fp,"\n");//寫入檔案時的換行。
				 n=0;
			 }
		 }
     if(fclose(fp)!=0)
		 fprintf(stderr,"Error in closing files\n");

	return 0;
}