查看單個文章
舊 2006-06-12, 12:20 AM   #5 (permalink)
getter
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

要寫檔的話... 可以使用 FILE 指標

範例 :
語法:
FILE *file1;  // 宣告檔案指標

file1=fopen("ABC.TXT","w");  // 開啟檔案 ABC.TXT 並為 寫入文字檔模式

fprintf ( file1,"哈囉你好 %s", "Hello" ); // 列印到檔案

fclose( file1 );  // 關閉檔案

以我之前的程式修改
RS 下載 http://rapidshare.de/files/22795140/2A2B.rar.html
語法:
/*
猜數字 1A2B
規則&條件:
1.先由電腦亂數決定 4 重複的位數。
2.讓玩家可以輸入猜測的數字。
3.判斷+顯示玩家的數字的 A B 率,A:位置,數值相等。B:僅數值相等。
4.可以按下 Q 鍵離開。
*/
#include <stdio.h>  /* 載入引導檔 stdio.h */ 
#include <math.h>   /* 載入引導檔 math.h */ 
#define S 20        /* 設定巨集 S 為 20 */ 
#define random(num) (rand() % (num))  /* 取亂數巨集 random(number)  */  
#define randomize() srand((unsigned)time(NULL)) /* 歸零亂數種子巨集 */  
#define clrscr() system("CLS")            /* 清除畫面巨集 */ 
#define pause() system("PAUSE")           /* 暫停畫面巨集 */  
#define swap_xor(x,y) (x^=y,y^=x,x^=y)    /* 用 XOR 做 AB 交換 */  
#define swap_tmp(x,y) (temp=x,x=y,y=temp) /* 用 變數 做 AB 交換 */  
unsigned temp;  

int main(void)
{
 int data_num [10] = {0};        /* 亂數取值的資料庫 */  
 int kc_num [2][4] = {0};	     /* [0][4]:NPC的答案 ; [1][4]:次猜測數值 */ 
 int check[3] = {0};             /* 0:紀錄 A; 1:紀錄 ; 2:while 判斷 4A條件 */ 
 int input = 0;		     /* 提供每次猜測數值、 Q 鍵時、答案 */
 int list_a[S] = {0};            /* list_a 記錄每次猜測數值 */
 int list_b[S][2] = {0};         /* list_b 記錄每次猜測時的 A,B */   
 int i,j;                        /* main 方法 while 使用變數 */
 
 FILE *file1;                    /* 宣告檔案指標 */
 file1=fopen("list01.txt","w");  /* 將 file1 指標 = 開啟檔案, w 寫入 */
 
 data_default ( data_num );  	 /* 資料起始 */
 rand_scan ( data_num );         /* 資料亂數交換,洗排列 */
 in_pc_mun ( kc_num[0], data_num ); /* 取 pc_mun 數值的方法 */

 i = j = 0;
 while ( check[3] != 4 )       /* 條件為 4A,離開 while loop  */
       {
        
		display( list_a, list_b );      /* 顯示資料 */
		   
        input = get_num ( kc_num[1] );  /* 輸入猜測數字 */
				
		if ( input == 'q' || input == 'Q' ) 
		    break; /* 檢查為 q 鍵,離開 while loop */
		   	
        AB_check ( kc_num, check );      /* 檢查 A,B */ 
        
        display_us_num ( kc_num[1], check );   /* 顯示需入的檢查結果 */
        
		list_a [i] = input;             /* 將單次的猜測數值記錄到 list */
		
		j++; 		/* 計數器 j 筆資料供寫入到檔案用 */ 
		if(j == 1)                      /* 第一筆資時先寫入表頭項目(檔案) */ 
		   fprintf ( file1,"%4s\t%8s\t %s ","No.","Number","Check" );
		  
	    fprintf ( file1,"\n %02d.\t%8d\t%dA,%dB", j, input, check[0], check[1]);
	    /* 寫入資料(檔案) */ 
	    
		check  [3]    = check[0];       /* 指定 while 判斷條件的隨機值 */ 	
		list_b [i][0] = check[0];       /* 寫入到記憶體 list 中的 A */ 
		list_b [i][1] = check[1];       /* 寫入到記憶體 list 中的 B */  
	    check[0] = 0 ;                  /* 將判斷的 check A 歸 0 */ 
	    check[1] = 0 ;			/* 將判斷的 check B 歸 0 */ 
       	    
		if ( i > ( S -1 ) )             /* 控制 list 的寫入位置 */ 
           	i = 0;
  	    else 
		    i++;
				
		pause();
	   }
puts(" ");
 if ( check[3] == 4)
    {
     printf("\n\t\t\t你贏了!");
     input = display_pc_num ( kc_num[0] );
     fprintf ( file1,"\n公佈答案 : %d",input);
     input = display_us_num ( kc_num[1] );
     fprintf ( file1,"\n你的答案 : %d",input);
	}
 else 
	{ 
	 printf("\n\t\t\t你輸了!");
     input = display_pc_num ( kc_num[0] );
     fprintf ( file1,"\n公佈答案 : %d",input);
	} 
 fclose( file1 );	 
 puts("\n程式結束\n"); 
 pause();
}
/*----------------------------------------------------------------------------*/
/* 來源資料起始 */
int data_default ( int*data )
{
 int i;
 for ( i = 0; i < 9; i++ )
 	  data [i] = i + 1; 
 randomize(); 
}
/*----------------------------------------------------------------------------*/
/* 來源資料交錯 */
int data_ins ( int*data ) 
{
 int i;  
 for ( i = 0; i < 4; i += 2 )
 	  	   swap_xor ( data [ i ], data [ 8 - i ] );
}
/*----------------------------------------------------------------------------*/
/* 來源資料亂數交換 */
int rand_scan ( int*data )
{
 int a, b, i;
 int rad_[2] = {0};
 for ( i = 0; i < 100; i++ )
     {
	  rad_[0] = random (9);
	  rad_[1] = random (9);
	  data_ins ( data );	
	  swap_tmp ( data [ rad_[0] ], data [ rad_[1] ] );
     }
}


/*----------------------------------------------------------------------------*/
/* 從來源資料中的取 4 位數 為 NPC 數值的方法 */
int in_pc_mun ( int*destination, int*source  ) 
{
 int i, j, k; 			  
 if ( ( random (2) + 1 ) == 1 ) /* 取 NPC 數值的方法 1: 亂數抓取法  */ 
    { 
     for ( i = 0; i < 4; i++ )  
         {
   	     j = random (9-i);
 	     destination [i] = source [ j ]; 
	     source [ j ] = 32;
	     move_data ( source ); 	  
	     } 
    }
 else                           /* 取 NPC 數值的方法 2: 亂數連號抓取法 */  
    {
	 j = random (9);
 	 if ( j < 5 )
	    {
	     for ( i = 0; i < 4; i++ )
              destination [ i ] = source [ i + j ];
	    } 
     else 
        { 
	     for ( i = 0; i < 4; i++ )
	         {
	          if ( i + j > 8 )
		          destination [ i ] = source [ i + j - 9 ];
		      else 
		          destination [ i ] = source [ i + j ];  
		     }
		}
	}
}
/*----------------------------------------------------------------------------*/
/* 來源資料中的特定的值記號往後移動 */
int move_data ( int*data ) 
{
 int i, j;
 for ( i = 0; i < 9; i++ )
 	 {
	  if ( data[i] >= 9 ) 
	      for ( j = 0; j < 9 - i ; j++ )
	           swap_xor ( data [j+i] , data [j+i+1] );			   
	 } 
}
/*----------------------------------------------------------------------------*/
/* 資料顯示 */
int display ( int*dat1, int*dat2[S][2] )
{
 int i, j;
 j = S / 2;
 clrscr();
 printf ("%4s\t%8s\t %s ","No.","4_Number","Check" );
 printf ("\t%4s\t%4s\t%8s\t %s ","▕","No.","4_Number","Check" );
 for ( i = 0; i < j; i++ )	  
 	 { 
	  printf ("\n %02d.", i+1);
 	  if ( dat1[i] != 0 )
	     { 
          printf ("\t%8d \t %dA,%dB", dat1[i], dat2[i][0], dat2[i][1] );
          if ( dat1[i+j] != 0 )
		      printf ("\t%4s\t %02d.\t%8d \t %dA,%dB",
		              "▕", i+j+1, dat1[i+j], dat2[i+j][0], dat2[i+j][1] );	
          else 
  	          printf ("\t%4s\t %02d.","▕", i+j+1);
		 }
	  else 
  	  printf ("\t%8s \t %s %s\t%4s\t %02d.","","","","▕", i+j+1);
  	  
	 } 
 puts("\n\n"); 
}
/*----------------------------------------------------------------------------*/
/* 資料顯示 NPC 的答案 */
int display_pc_num ( int*data )
{
 int i, sum = 0;
 printf("\n公佈答案   : "); 
 for ( i = 0; i < 4; i++ )
     {	  
 	  printf ("%d ", data [i]);
	  sum = sum + data [i] * pow(10,3-i);
	 } 
 
 return sum;
}
/*----------------------------------------------------------------------------*/
/* 資料顯示玩家猜測的數值 */
int display_us_num ( int*data,int*check )
{
 int i, sum = 0;
 printf("\n你猜的數字 : "); 
 for ( i = 0; i < 4; i++ )	  
     {	  
 	  printf ("%d ", data [i]);
	  sum = sum + data [i] * pow(10,3-i);
	 }
 if ( check[0] >= 0 )
     printf("%dA,%dB", check[0], check[1] );
 puts("\n\n");
 return sum;
}
/*----------------------------------------------------------------------------*/
/* 輸入猜測數字 */
int get_num ( int*destination )
{
 char input[10];
 int num;
 printf("請輸入猜測數字 4 位數,1 ~ 9 不可重複 (按 Q 離開): ");
 rest:
 scanf("%s",&input);
 if ( input[0] == 'q' || input[0] == 'Q' )
     return input[0]; 
 num = atoi (input);
 if ( num > 9999 )
    { 
     printf("超過 4 位數,請重新輸入 : ");
	 goto rest;
    }
 destination[0] = num/1000%10; /* 取千位數 */
 destination[1] = num/100%10;  /* 取百位數 */ 
 destination[2] = num/10%10;   /* 取拾位數 */  
 destination[3] = num%10;      /* 取個位數 */  
 if ( check_get_num ( destination ) ) 
    { 
     printf("有重複位數,請重新輸入 : ");
	 goto rest;
    }

 else 
     return num;
}
/*----------------------------------------------------------------------------*/
/* 檢查輸入猜測數字 */
int check_get_num ( int*check )
{
 int i, j, k = 0;
 for ( i = 0; i < 4 ; i++ )  
 	 {
      for ( j = 0; j < 4 ; j++ ) 
          {
	       if ( check[i] == check[j] )
		       k++;
		  }  
	 }
 k -= 4;
 if ( k > 0 ) 
     return 1; 
 else 
     return 0;
}
/*----------------------------------------------------------------------------*/
/* 檢查猜測數字的 A,B 值 */
int AB_check ( int data[2][4], int*C )
{
 int i, j, k = 0;
 for ( i = 0; i < 4; i++ )
      if ( data[0][i] == data[1][i] )
          C [0]++;
      else 
         {
   		  for ( j = 0; j < 4 ; j++ )
	          {
  			   if ( data[0][j] == data[1][i] )
                   C [1]++;
			  }
		 }
}
/*----------------------------------------------------------------------------*/
__________________
在「專業主討論區」中的問題解決後,要記得按一下 http://forum.slime.com.tw/images/stamps/is_solved.gif 按鈕喔,
這是一種禮貌動作。

一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。

天線寶寶說再見啦~ ... 天線寶寶說再見啦~

迪西:「再見~ 再見~」

Otaku Culture Party 關心您 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖