![]() |
|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
![]() |
#3 (permalink) |
管理員
![]() ![]() |
![]() 要寫檔的話... 可以使用 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]++; } } } /*----------------------------------------------------------------------------*/ |
![]() |
送花文章: 37855,
![]() |