Download presentation
Presentation is loading. Please wait.
1
Console IO & Pointer 授課:ANT 日期:2011/4/11
2
Outline 學習目標 在Code::Blocks使用ConsoleIO的指令 Conio.h ASKII碼 移動游標 色塊更動 LAB8
HW8
3
學習目標 學會Code::Blocks中讓一般輸出內容能顯示彩色文字 學會使用方向鍵控制游標位置
4
在Code::Blocks使用Conio指令
第一步:因為Code::Blocks本身就有conio.h檔,其內容包含的函式較簡單。因此需要另外新增.h檔,才能使用更多功能。到實驗室網頁下載 Conio0.h 、 Conio2.h Conio0.h是DEV C++所使用的header檔,函式庫較多。 第二步:將所下載之檔案放置到與.c檔相同的資料夾內 使用#include “conio0.h”
5
#include 差異 #include <stdio.h> #include “stdio.h”
意義是他會去找尋資料夾include底下的.h檔 C:\ProgramFiles\CodeBlocks\MinGW\include(預設) #include “stdio.h” 意義則是他會去找跟.c同一個資料夾底下的.h檔 另外可在” ”內放入檔案位置, 就可以include不同資料夾底下的檔案
6
Conio0.h(1/4) void gotoxy (int x, int y) int wherex (void)
Moves cursor to the specified position. int wherex (void) Reads the cursor X position. int wherey (void) Reads the cursor Y position.
7
Conio0.h(2/4) void cputsxy (int x, int y, char *str)
Puts string at the specified position. void putchxy (int x, int y, char ch) Puts char at the specified position.
8
Conio0.h(3/4) void textbackground (int color)
Sets text background color. void textcolor (int color) Sets text foreground color. void clrscr (void) Clears whole screen.
9
Conio0.h(4/4) enum COLORS { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE } 其他Function
10
VC 如何產生彩色文字請參考 其他Function http://support.microsoft.com/kb/319234/zh-tw
11
UNIX 請參考BBS Programming版 第35篇 => curses 清螢幕
#include <curses.h> 使用方式連結
12
ASCII 目前電腦中用得最廣泛的字元集及其編碼,是由美國國家標準局(ANSI)制定的ASCII碼(American Standard Code for Information Interchange,美國標準資訊交換碼)。 第0~32號及第127號(共34個)是控制字元或通訊專用字元,如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BEL(振鈴)等; 第33~126號(共94個)是字元 第48~57號為0~9十個阿拉伯數字 第65~90號為26個大寫英文字母 第97~122號為26個小寫英文字母 參考網址
13
範例一 右為範例一的code 由上到下的按鍵順序為 控制信令(delete)與中文都 是由兩個字元組成。 上 下 左 右 Enter
Space Delete 控制信令(delete)與中文都 是由兩個字元組成。
14
游標移動 使用方向鍵控制游標位置 上 ACSII: 224 72 (意思是說它是由兩個字元組成) 下 ACSII: 224 80
Esc ACSII: 27 與ASCII搭不起來的原因:現在的鍵盤上有些鍵沒有對應的ASCII字元或控制字元,例如游標控制鍵/箭頭鍵和字處理功能鍵。這些鍵盤和其所連接的計算機通過幾種方法通信:將一些在其他情況下不使用的控制字元定義新的用法、使用其他一些非ASCII的編碼、或者使用多個字元構成的控制序列。連接到獨立的個人電腦上的鍵盤通常用前兩種方法之一或兩者都用 游標一開始位置,不要是(0,0),執行後容易產生問題,最好由(1,1)開始
15
範例二
16
範例二code 右為範例二的code 在移動到下一個 座標時,要將前一個座 標的圖示 * 給消除。 runx-1的源由在於當
使用cputsxy印出字串時 游標已經移動到下一格去 因此在換作標顯示時必須 往後退一格做印出“ “空格 來消除圖示 *
17
範例三
18
範例三code 右為範例二的code Textbackground為設定背景顏色 Textcolor為設定文字顏色
利用wherex以及wherey取得游標 座標,在執行for迴圈作畫圖動作
19
指標 指標(Pointer)也是一種變數,但是指標儲存的值是記憶體位址。 指標在宣告時與一般變數的差異 int *p; //整數指標
int price; //整數變數
20
運算元& 變數給值price = 100 ,指標又該如何給值(記憶體位址)?
&稱位址運算元(address operator) ,用來取得變數的記憶體位址。 p = &price;
21
運算元* 程式碼p = &price執行後,如何取得指標p所指的變數price的值?
*稱間接運算元(indirect operator) 或反參考運算元(de-reference operator) ,用來取得指標所記錄記憶體位址所儲存的變數值。
22
示意圖 100 100 100 0022FF20 程式碼 int price = 100; int *p; p = &price;
記憶體位址 price 變數名稱 程式碼 int price = 100; int *p; p = &price; 100 0022FF20 0022FF24 price p 100 0022FF20 0022FF24 price p
23
範例程式6_01.c
24
指標與一維陣列 (a) (b)
25
示意圖 1 2 3 4 5 6 7 8 9 arr p *(p+0) *(p+1) *(p+2) *(p+3) *(p+4) *(p+5)
*(p+1) *(p+2) *(p+3) *(p+4) *(p+5) *(p+6) *(p+7) *(p+8) *(p+9) 22ff20 說明: 在(a)迴圈中,指標指向的位址並沒有改變 在(b)迴圈中,p++指標移動,改變了所指向的位址 在使用p++的時候要小心,別指過頭了!!! 1 2 3 4 arr 22ff20 p 22ff24 p++
26
Lab06 任意挑選一張牌並印出來(需有邊框,花色牌值放中間,可參考P.17範例三code) 四種花色與牌值需用指標
花色: “♣”,“♦”,“♥”,“♠“ (”♦”,“♥”須為紅色) 牌值:2~10,J,Q,K,A 提示:利用rand(); #include<time.h> #include<stdlib.h> int var,constant srand(time(NULL)); var = rand()%constant ;
27
Lab06
28
HW06 Black Jack (21點) 程式需求 (1)牌不能重複 (2)電腦當莊家,自己為玩家
(3)可以一直玩到牌發完。牌發完時直接比 當時牌面大小決定勝負。
29
HW06 (4)四種花色與牌值需用指標 花色: “♣”,“♦”,“♥”,“♠“ (”♦”,“♥”須為紅色) 牌值:2~10,J,Q,K,A
Similar presentations