Professional Documents
Culture Documents
(Tài liệu lập trình C) - Chương 2 - Những Kỹ Thuật Nâng Cao PDF
(Tài liệu lập trình C) - Chương 2 - Những Kỹ Thuật Nâng Cao PDF
(Tài liệu lập trình C) - Chương 2 - Những Kỹ Thuật Nâng Cao PDF
Apprenez programmer en C
www.siteduzero.com
Tc gi: M@teo21
5) Preprocessor Tin x l
#include.
#define.
Macro.
Condition.
3) Arrays (Mng)
Cc Arrays trong b nh.
Cch to mt array.
Lit k cc gi tr trong array.
To mt function lit k cc gi tr
trong array.
Bi tp thc hnh.
8) Cp pht ng
Kch thc ca bin.
Cp pht b nh ng.
Gii phng b nh.
4) Chui k t
Bin kiu Char.
String hay cn gi l mng k t.
Cc thao tc vi chui k t.
-1-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 1: Modular Programming
M-un Lp Trnh
Trong chng th hai ca bi hng dn, bn s khm ph nhng khi nim lp trnh ngn ng
C cao hn.
Cho n lc ny, cc bn cng ch lm vic trn mt file duy nht tn l "main.c"
iu ny c th tm chp nhn trong giai on hin ti v chng trnh ca chng ta vn cn kh
ngn, nhng sp ti chng trnh ca chng ta s cha hng chc, thm ch hng trm functions,
nu bn t tt c chng trong cng mt file th s rt di !
Cng chnh v l do m ngi ta sng to ra ci gi l modular programming. V mt
nguyn tc th nghe c v kh ngu ngc: thay v t tt c cc dng code trong mt file duy nht
(main.c), chng ta s chia ra thnh nhiu file nh hn.
Prototypes
Nhng bi hng dn trc, ti yu cu bn t cc functions trc main. Ti sao vy?
Ti v th t sp xp c mt tm quan trng: Khi bn t function trc main, my tnh s c v
nh n. Khi c gi li trong main, my tnh s bit phi kim li function u.
Nhng nu bn t sau main, chng trnh s khng hot ng v my tnh vn khng bit
function l g.
Hy test th, bn s thy ngay !
-2-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
double dientichHinhChuNhat (double chieuRong, double chieuDai)
{
return chieuRong * chieuDai;
}
-3-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
-4-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
cho chnh xc hn, bn cn bit thm: dng code prototype khng cn thit
phi vit li tn ca cc bin s cn cho parameter. My tnh ch cn bit type ca
cc bin s thi.
Headers
Cho n lc ny, bn cng ch s dng duy nht mt file source cho project ca bn. V ti yu
cu bn gi file source ny l main.c
Cch s dng nhiu files trong cng mt project
Trong thc t, chng trnh s khng c vit ht ton b trong mi file main.c
Chc chn l chng ta cng c th lm vy nhng vic m mm trong mt file cha 10000 dng
code tht s khng thit thc cht no. Chnh v vy, thng thng, mt project s c to
bi nhiu files.
-5-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ok, khng sao, ti s gii thch li cho bn, vic chng ta thng nht chung v khi nim tht s
cn thit.
Project l tp hp nhng files source ca chng trnh.
Trong thi im hin ti, chng trnh ca chng ta ch cha mi mt file duy nht. Hy nhn
vo IDE, pha bn tri:
Bn thy trong hnh chp pha trn, bn tri, project ny ch cha duy nht mi file main.c
Sau y, ti s cho bn xem hnh nh mt chng trnh tht s, chng trnh m bn s thc hin
trong nhng bi sau: tr chi Sokoban
Bn thy y, c kh nhiu files khc nhau. Mt chng trnh bnh thng s ging nh trn:
bn s thy nhiu files c lit k ct bn tri.
Bn cng tm thy file main.c: bn trong cha function main. V hu nh mi chng trnh ti
vit, ti u function main trong file main.c (iu ny khng bt buc, mi ngi c cch sp
xp khc nhau, nhng theo ti tt nht bn nn thc hin ging ti im ny).
-6-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Cc files .h v .c
Bn thy trong hnh v trn, c 2 loi file khc nhau:
nhng file .h: gi l file headers. Nhng file ny cha prototype ca cc functions.
nhng file .c: l nhng file source. Nhng file ny cha ni dung ca cc functions.
Bnh thng, ngi ta rt t khi nhng prototypes trong cc file .c ging nh va ri chng ta
lm trong file main.c (ch tr khi chng trnh qu nh).
Mi file .c tng ng vi mt file .h trong cha nhng prototype ca nhng functions. Xem
li hnh trn mt ln na:
-7-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
#include <stdio.h>
#include <stdlib.h>
#include "game.h"
void play (SDL_Surface* screen)
{
//....
Ngoc nhn < > thm vo mt file th vin tm thy trong folder ca IDE
Ngoc kp " " thm vo mt file tm thy trong folder project ca bn ( bn cnh
nhng file .c)
-8-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
-9-
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 10 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Folder project v sau s tng t nh hnh chp sau, bn thy nhng file .c v .h c t chung
vi nhau:
- 11 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 12 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 13 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Link editor (linker): l mt chng trnh tng hp li nhng file .o thnh mt file ln
cui cng: executable. Nhng file executable c ui .exe di Windows. (C ui khc
nu bn s dng mt h iu hnh khc).
- 14 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 15 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Trong main, ti th s dng bin s ketqua. Bin s ketqua ny c khai bo trong function
triple, n khng s dng c trong function main !
Nm vng: mt bin s khai bo trong function no th ch c th dng bn trong function
. Ngi ta gi l bin cc b (local variable).
- 16 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 17 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 18 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 19 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Nu ta mun mt function dng ring cho mi file cha n, bt buc phi thm vo t
kha static pha trc.
- 20 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 2: Pointer
Con tr
n lc chng ta tm hiu v con tr. Hy ra ht mt hi tht su trc khi bt u v ti bit
bi hc ny chc chn s khng khin bn thy th v. Nhng con tr l mt khi nim c
s dng rt thng xuyn trong C. Ni v tm quan trng, chng ta khng th no lp trnh trn
ngn ng C m khng dng n con tr, v bn cng tng dng n m khng bit.
Phn ln nhng ngi bt u hc C thng xuyn vp ng trong phn kin thc v con tr. V
ti hi vng bi hc ny s gip cc bn khng nm trong s . Hy tp trung gp i bnh
thng v b thm thi gian hiu r tng biu , v d c trong bi hc ny.
Mt vn nan gii
y l mt trong nhng vn ln lin quan n con tr, cc bn mi bt u thng b nhm
ln, cm thy kh khn trong vic nm vng cch hot ng v s dng.
"Con tr rt cn thit, v chng ta s thng xuyn dng n n, hy tin ti !"
Ti s cho bn xem mt v d m cc bn khng th no gii quyt c nu khng s dng n
con tr. y cng l tiu im ca bi hc ny, ti s hng dn cch gii quyt cui bi hc.
y l vn : Ti mun vit mt function tr v hai gi tr. Vic ny l khng th v mi
function ch c th tr v duy nht mt gi tr.
C code:
int function ( )
{
return giatri;
}
Nu ta khai bo function vi type int, th ta s nhn c mt s dng int (nh vo instruction
return).
Chng ta cng hc cch vit mt function khng tr v bt c gi tr no vi t kha void:
C code:
void function( )
{
}
Nhng nhn c hai gi tr tr v cng lc tht s l vic khng th. Chng ta khng th s
dng hai return cng lc.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 21 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 22 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
V y l kt qu:
Console
0 gio va 90 phut
c... chng trnh khng hot ng. V sao vy?
Khi bn gi gi tr ca mt bin s vo v tr parameter ca mt function, mt bn sao ca bin
s ny c to ra. Ni cch khc, bin s "gio" trong function chuyenDoi khng phi l bin s
"gio" trong function main! N ch l bn sao!
Function chuyenDoi thc hin nhim v ca n. Trong function chuyenDoi, nhng bin s
"gio" v "phut" nhn gi tr chnh xc: 1 v 30.
Nhng sau , function kt thc khi du ngoc } ng li. Nh ta hc bi hc trc, tt c
nhng bin s to ra trong mt function s b xa i khi function kt thc. V y, bin s
gio v phut b xa i. Sau chng trnh tip tc phn tip theo ca main, v bin s
gio v phut ca main gi tr vn l 0 v 90. l l do bn tht bi!
- 23 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
a ch trong b nh
Nhc li kin thc
Bn cn nh bi hc v nhng bin s khng?
D c hay khng, ti vn khuyn khch bn xem li phn u ca bi hc, phn "Cng vic ca
b nh".
Trong c mt biu kh quan trng m ti cn nhc li trc khi dy bn nhng kin thc
mi:
- 24 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
a ch v gi tr
Khi bn to ra mt bin s tuoi type int, ly v d:
C code:
int tuoi = 10;
... chng trnh ca bn s yu cu h iu hnh (v d l Windows) quyn s dng mt t b
nh. H iu hnh s tr li bng cch a ra a ch b nh c php cha con s bn cn.
y cng l mt trong nhng nhim v chnh ca h iu hnh:
Khi chng ta yu cu mn b nh cho chng trnh. My tnh ging nh ng ch, n iu hnh
tng chng trnh v kim tra xem chng c quyn s dng b nh ti v tr c cp hay khng.
V y l mt trong nhng nguyn nhn khin my tnh bn b : Nu chng trnh t nhin
hot ng trn mt vng b nh khng cho php. H iu hnh (OS) s t chi v dng ngay
chng trnh, ging nh ni vi bn "My ngh ai l ch y?"
Ngi dng, s nhn thy
mt ca s hin ln thng bo dng "Chng trnh b dng li do thc hin mt cng vic khng
c php".
Quay tr li vi bin s tuoi. Gi tr 10 c a vo mt v tr no trong b nh, ly v d n
c a vo a ch 4655. V iu xy ra y l (nhim v ca compiler), t tuoi trong
chng trnh s thay th bng a ch 4655 khi c chy.
Vic ging nh, mi khi bn in vo tuoi trong code source, chng s c chuyn thnh
4655, v my tnh s bit c cn n a ch no trong b nh ly gi tr . V ngay sau ,
my tnh xem gi tr c cha trong a ch 4655 v tr li chng ta "bin s tuoi co gi tr l
10"!
V ly gi tr mt bin s, n gin ch cn nh tn ca bin s vo code source. Nu ta
mun hin th tui, ta c th s dng function printf:
C code:
printf ("Bien so tuoi co gia tri la : %d", tuoi);
Khng c iu g mi vi dng code trn ng ko.
- 25 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Khuyn mi thm!
Bn bit cch hin th gi tr ca mt bin s, nhng bn c bit chng ta cng c th hin th
a ch ca bin s ?
...ng nhin l bn cha bit ri
hin th a ch ca mt bin s, chng ta cn s dng k hiu %p (p y vit tt ca t
pointer) trong printf. Mt khc, chng ta phi a vo printf a ch ca bin s v lm
vic ny, bn cn phi t k hiu & trc bin s (tuoi), ging nh cch ti hng dn bn s
dng scanf, xem code sau:
C code:
printf ("Dia chi cua bien so tuoi la %p", &tuoi);
Kt qu
Console
Dia chi cua bien so tuoi la 0023FF74
l a ch ca bin s tuoi trong thi im chng trnh hot ng. Vng, 0023FF74 l mt
s, n n gin ch c vit trn h hexadecimal (thp lc phn), thay v h decimal (thp phn)
m chng ta thng s dng. Nu bn thay k hiu %p thnh %d, bn s nhn c mt s thp
phn m bn bit.
Nu bn chy chng trnh ny trn my tnh ca bn, a ch s khc hon ton. Tt c ph
thuc vo phn trng c trong b nh, chng trnh bn ang dng,... Hon ton khng c kh
nng bo trc a ch no ca bin s s c cp. Nu bn th chy chng trnh lin tc
nhiu ln, a ch c th s khng i trong thi im . Nhng nu bn khi ng li my tnh,
chng trnh chc chn s hin th mt gi tr khc.
Vy chng ta s lm g vi tt c nhng th ?
Ti cn bn nm vng nhng iu sau:
- 26 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 27 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 28 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 29 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Chng ta bt u tin vo th gii huyn diu ca nhng con tr. Th gii b mt ca nhng
chng trnh vit trn ngn ng C (C++)
- 30 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Nhng iu cn nm vng
y l nhng iu m bn cn hiu v nm vng trc khi tip tc bi hc:
- 31 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
c th hiu c 4 im chnh trn. Bn cn test nhiu ln hiu cch n hot ng. Biu
sau y gip bn c th hiu r hn:
- 32 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Tt c nhng iu trn l c bn. Bn phi hc thuc lng v tt nhin phi hiu r. ng ngi
c i c li nhiu ln. ng xu h nu khng hiu ngay c bi hc khi ch c qua ln u
tin, c nhiu vn chng ta cn nhiu ngy c th hiu r v i khi cn nhiu thng c
th s dng thnh tho.
Nu bn c cm gic khng theo kp, th hy ngh n nhng bc thy trong vic lp trnh: khng
ai trong s h c th hiu r hon ton hot ng ca con tr trong ln u tin. Nu c mt
ngi nh vy tn ti, bn hy gii thiu vi ti nh.
Console
15
Function triplePointer nhn vo parameter gi tr type int * ( l mt con tr ch vo mt bin
s type int).
- 33 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 34 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 35 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Trong chng trnh "Ln hn hay nh hn", chng ta s dng con tr bt chp vic bit n
l g, trong vic s dng function scanf.
Tht ra, function ny c tc dng c nhng thng tin m ngi dng nhp vo bn phm v gi
li kt qu.
scanf c th thay i trc tip gi tr ca mt bin s bng cch nhp t bn phm, ta cn a
ch ca bin s :
C code:
int soHang = 0;
scanf ("%d", &soHang);
function lm vic vi con tr ca bin s soHang v c th thay i trc tip gi tr ca soHang.
- 36 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Console:
1 gio va 30 phut
- 37 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Khng c g khin bn ngc nhin trong on code source ny. V nh mi khi, trnh nhng
nhm ln khng ng c, ti s gii thch nhng g din ra chc chn rng cc bn theo kp
ti, v y l mt bi hc quan trng, bn cn c gng rt nhiu hiu, v ti cng c gng ht
sc gii thch r rng gip cc bn hiu:
1. Bin s gio v phut c khi to trong function main.
2. Ta gi vo function chuyenDoi a ch ca gio v phut.
3. Function chuyenDoi nhn a ch bng cch a vo cc con tr pointerGio v
pointerPhut. Bn cn bit rng, cch gi tn con tr khng quan trng. Ti c th gi l g
v p, hoc cng c th l gio v phut.
4. function chuyenDoi thay i trc tip cc gi tr ca gio v phut trong b nh v n c
a ch ca chng trong cc con tr. V iu cn bit y, tuyt i chp hnh, l phi
t * trc tn ca con tr nu nh ta mun thay i gi tr ca gio v phut. Nu ta khng
lm vic ny, ta s thay i a ch cha trong con tr, v n chng gip ta c g.
- 38 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 3 Array
Mng
Bi hc ny l phn tip theo ca bi trc, n gip bn hiu thm v cch s dng cc pointer.
Bn cm thy c cht kh khn trong vic s dng cc pointers?
Bn s khng trnh khi vic dng chng u! Cc pointers c s dng thng xuyn trong C,
ti ni vi bn iu ny!
Trong bi hc ny, chng ta s hc cch to nhng bin s type "array" hay cn gi l mng. Cc
mng c s dng thng xuyn trong C v n tin li trong vic sp xp mt chui cc gi tr.
Cc arrays trong b nh
Arrays l mt dy cc bin s cng type, cha trong mt vng b nh lin tc.
R rng hn, mng c th cha mt s lng ln bin s cng type (long, int, char, double...).
- 39 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 40 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 41 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 42 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Console:
10
23
505
8
Vng lp s chy dc cc trong mng nh vo bin s i (cc nh lp trnh thng dng i, y l
mt bin s kh thng dng chy dc mt mng)
Cch ny c bit thng dng, ta mt bin s trong du [ ]. Nhng bin s tuyt i cm s
dng trong vic to cc mng ( khai bo kch thc), nhng n c php s dng "di
chuyn" trong mng, c ngha l hin th cc gi tr! Trong v d trn, ti t bin s i, n s
- 43 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
int main (int argc, char *argv[ ])
{
int array[4], i = 0;
// Khoi tao cac gia tri trong array
for (i = 0 ; i < 4 ; i++)
{
array[i] = 0;
}
// Hien thi cac gia tri de kiem tra
for (i = 0 ; i < 4 ; i++)
{
printf ("%d\n", array[i]);
}
return 0;
}
Console:
0
0
0
0
- 44 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 45 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 46 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 47 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi tp 4
Vit mt function maximumArray c nhim v so snh tt c cc gi tr cha bn trong array vi
giaTriMax. Nu c gi tr ln hn bin s giaTriMax a vo, n s chuyn thnh 0.
Prototype:
C code:
void maximumArray (int array[ ], int kichThuoc, int giaTriMax);
VD: array {1,5,7,8,5,2,3} v max=5, s chuyn thnh {1,5,0,0,5,2,3}.
Bi tp 5
Bi tp ny kh hn hn cc bi tp kia nhng bn hon ton c kh nng thc hin.
Hy vit mt function sapXepArray sp xp li cc gi tr bn trong theo th t tng dn.
C code:
void sapXepArray (int array[ ], int kichThuoc);
VD: array {1,5,7,8,5,2,3} s chuyn thnh {1,2,3,5,5,7,8}.
Hy vit trong file array.c cha tt c cc functions cn thit v file array.h cha cc
prototypes ca cc functions .
No bt u lm vic thi !
Nu bn qua c bi hc v pointer th cc bi khc cc bn u c th vt qua. Ti khng
ngh l bi hc ny s gy kh khn cho bn.
Bn nn nh hai iu quan trng sau:
- 48 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 4: String
Chui (mng k t)
String - Chui (mng k t) l mt thut ng tin hc chnh xc dng ch mt dy cc k t,
n gin l nh vy! Mt chui k t c lu trong b nh my tnh di dng bin s. Nh
vy ta c th lu tr tn ca ngi dng.
V nh bn bit, my tnh ch c th nh c nhng con s. My tnh khng hiu ch ci l
g. Vy lm th no my tnh c th nh c nhng dy k t?
Bin kiu char:
Trong phn ny, chng ta s c bit quan tm n bin kiu char. Bn c nh rng bin kiu
char cho php cha cc con s trong khong -128 v 127.
Liu bin kiu char c cho php cha nhng con s? Bn cn bit rng trong C ngi
ta rt him khi s dng chng lm iu . Bnh thng, ngay c i vi nhng con s tht
s nh, ngi ta vn dng int lu li. Hn rng ti s dng nhiu b nh hn so vi char
nhng trong thi i ngy nay, vn b nh khng cn ng lo na.
Tht ra bin kiu char c to ra cha mt k t! Ch l ti ni r rng mt k t .
B nh my tnh ch c th cha nhng con s nn ngi ta to ra mt bng chuyn i gia
s v k t. Ly v d con s 65 s c chuyn i thnh ch ci A.
Ngn ng C cho php chng ta chuyn i d dng gia s v ch ci tng ng. nhn c
mt s ng vi ch ci, ngi ta ch cn vit chng gia nhng du mc n, nh sau: A. Qua
qu trnh compilation, A s c thay th bng con s tng ng.
Test th no:
C code:
int main (int argc, char *argv[ ])
{
char letter = 'A';
printf ("%ld\n", letter);
return 0;
}
Console:
65
- 49 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Chng ta thy ngay rng ch A vit hoa c thay bng s 65. Tng t nh vy B thay bng
66, C bng 67 Test th vi nhng ch ci vit thng, gi tr ca nhng ch ci s thay i.
V ch a khng ging nh A, my tnh phn bit ch ci vit hoa v vit thng.
Hu ht cc ch ci thng thng c code gia 0 v 127. Bng chuyn i gia s v ch ci
c tn l ASCII (cch c t-x-ki).
Trang web AsciiTable.com l a ch kh ni ting tm thy bng chuyn i ny nhng n
khng phi l duy nht, chng ta c th tm thy n trn Wikipdia v mt s trang web khc.
Cch hin th mt k t:
Function printf, s tip tc lm chng ta ngc nhin, n c kh nng hin th mt ch ci. lm
iu , chng ta cn phi s dng k hiu %c (c vit tt ca character):
C code:
int main (int argc, char *argv[ ])
{
char letter = 'A';
printf ("%c\n", letter);
return 0;
}
Console:
A
Chc mng bn bit cch hin th mt ch ci!
Chng ta cng c th yu cu ngi dng nhp vo mt ch ci bng cch s dng %c trong
scanf:
C code:
int main (int argc, char *argv[ ])
{
char letter = 0;
scanf ("%c", &letter);
printf ("%c\n", letter);
return 0;
}
- 50 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Cn nh:
Type char cho php nhp vo nhng gia tr t -128 n 127, unsigned char t 0 n 255.
C nhng bng chuyn i cho php my tnh chuyn t ch ci thnh s v ngc li.
Chng ta c th s dng type char ch cha MT ch ci.
A c chng trnh dch chuyn thnh mt s tng ng (thng thng l 65). Chng
ta dng nhng du ngoc n c c gi tr ca mt ch ci.
nu ti t vo string[0] ch ci H, string[1] ch ci e ti s to c mt dy k t ,
hoc l mt vn bn (text)
- 51 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 52 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 53 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 54 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 55 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
int main (int argc, char *argv[ ])
{
char ten[100];
printf ("E ku, may ten gi vay? ");
scanf ("%s", ten);
printf ("Hello %s, tao rat vui vi duoc gap may!", ten);
return 0;
}
Console:
E ku, may ten gi vay? M0N1M
Hello M0N1M, tao rat vui vi duoc gap may!"
V y l phn ln nhng g phi lm yu cu ngi dng nhp vo mt t.
- 56 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 57 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ti s vit function strlen ca ring mnh. Vic ny s gip bn hiu r hn n hot nh th no:
C code:
long doDaiChuoi(const char* string);
int main (int argc, char *argv[ ])
{
char string[ ] = "Hello";
long doDai = 0;
doDai = doDaiChuoi(string);
printf ("chuoi %s co do dai %ld ki tu", string, doDai);
return 0;
}
long doDaiChuoi (const char* string)
{
long soLuongKiTu = 0;
char kiTuHienTai = 0;
do
{
kiTuHienTai = string[soLuongKiTu];
soLuongKiTu++;
}
while (kiTuHienTai != '\0'); // Vong lap tiep tuc neu ki tu hien tai khong phai la \0
soLuongKiTu--; // Do dai chuoi giam di 1 vi ta khong tinh \0
return soLuongKiTu;
}
Gii thch
1. Function doDaiChuoi to vng lp trn mng string. N s lu li tng k t trong bin
kiTuHienTai. Khi kiTuHienTai tin n \0, vng lp s dng li.
2. Ti mi vng lp, ln s tng ln 1 sau mi ln truy cp cha k t.
3. Khi kt thc vng lp, s lng k t s bt i 1. iu ny c ngha l ta khng tnh k
t kt thc chui \0.
4. Cui cng, kt qu s c tr v soLuongKiTu.
5. Tr chi kt thc.
- 58 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 59 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Biu s nh sau:
- 60 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 61 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 62 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Strchr: tm kim mt k t
Chc nng ca function strchr l tm kim mt k t trong chui.
Prototype ca function strchr y:
char* strchr(const char* string, int characterSearch);
function nhn 2 parameters:
Bn thy rng characterSearch l bin kiu int ch khng phi char. iu ny cng bnh thng
thi v v c bn, k t chnh l s.
Tuy nhin, ngi ta thng dng char hn l int cha mt k t trong b nh.
Function s tr v pointer ca ch ci u tin tm thy, c ngha l tr v a ch ca k t
trong b nh. Kt qu s tr v NULL nu khng tm thy k t bn mun tm.
Trong v d sau, ti s lu pointer ny trong subString:
C code:
int main (int argc, char *argv[ ])
{
char string[ ] = "Text for test", *subString = NULL;
subString = strchr(string, 'f');
if (subString != NULL) // NULL la ko tim thay, vay dong nay nghia la neu ta tim dc gi do
{
printf ("Bat dau tu ky tu dau tien duoc tim thay, string duoc in ra la : %s \n", subString);
}
return 0;
}
Console:
Bat dau tu ky tu dau tien duoc tim thay, string duoc in ra la : for test
Bn hiu iu g xy ra y khng? C mt s khc bit nh y .
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 63 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Khi ti vit mt printf ln subString, thng thng n s hin th kt qu l for test. Function
printf s hin th tt c nhng ch ci n gp ('f', 'o', 'r ', ' ' 't', 'e', 's', 't') n khi gp k t \0
thng bo l string kt thc y.
Bin th:
Ngoi ra cn c mt function strrchr vi cch hot ng hon ton ging nh strchr, khc
ch n s ch vo ch ci cui cng c tm thy trong string thay v ch ci u tin.
Lu :
- 64 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Prototype ca function ny l:
char* strpbrk (const char* string, const char* charactersSearch);
Test th xem no:
C code:
int main (int argc, char *argv[ ])
{
char *subString;
// Chung ta tim kiem su xuat hien dau tien cua 1 trong 3 ky tu x, f hoac s trong "Text for test"
subString = strpbrk("Text for test", "xfs");
if (subString != NULL)
{
printf ("Sau khi tim mot trong ba ky tu: x, f, s trong "Text for test"\n");
printf ("Bat dau tu ky tu dau tien duoc tim thay.\n");
printf ("Bien string duoc in ra la: %s", subString);
}
return 0;
}
Console:
Sau khi tim mot trong ba ky tu: x, f, s trong "Text for test"
Bat dau tu mot trong nhung ky tu dau tien duoc tim thay.
Bien string duoc in ra la: xt for test
Trong v d ny, ti a trc tip cc gi tr vo thng function (trong ngoc kp). Chng ta
khng b bt buc phi to mt bin s, vic vit trc tip nh th ny kh tin li.
Cc bn phi lu nhng cch vit sau:
Nu cc bn s dng ngoc kp c ngha l chui (mng k t).
Nu cc bn s dng mc n c ngha l k t
- 65 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 66 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 67 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Tng kt !!!
- 68 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 5: Preprocessor
Tin x l
Sau nhng bi hc v con tr (pointer), mng (array) v chui k t (string), chng ta s tm ngh
ngi mt cht.
Ti ngh n thi im ny cc bn c c khng t nhng kin thc lp trnh t cc bi hc
trc v c l chng ta nn ngng li mt cht cho d th.
Nhng iu ny khng c ngha l s khng c iu g mi m hc trong thi gian ny. Nhn
chung trong bi ny, bn s c hc mt s th n gin, cng nh c nhc li mt vi kin
thc.
Bi ny s vit v Tin x l (Preprocessor), y l nhng chng trnh c chy trc khi bin
dch (Compilation).
Ti c mt s th hin qu trnh bin dch (compile) ca my tnh to ra mt chng trnh.
Chng ta cng nhau tham kho hiu r hn nh:
- 69 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ch th #include
Ging nh ti tng gii thch trong chng u tin, chng ta tm thy trong m ngun nhng
dng hi c bit gi l ch th tin x l (preprocessor directives).
Nhng preprocessor directives c c tnh sau: chng lun bt u bng k t #. Kh d dng
nhn bit. V dng directive u tin (cng l duy nht) m chng ta tng thy cho n thi
im ny l #include.
Dng directive ny cho php thm ni dung mt file khc vo file ang vit.
Chng ta c bit dng #include thm vo file.c cc ni dung t nhng file.h ca cc th vin
(stdio.h, stdlib.h, string.h, math.h) v cng c th l t nhng file.h ca ring bn.
thm ni dung nhng file.h c trong th mc ci t IDE ca bn, bn cn s dng nhng
ngoc nhn < > :
Code C:
#include <stdlib.h>
thm ni dung nhng file.h c trong th mc cha project ca bn, bn cn s dng nhng
du ngoc kp:
Code C:
#include "myfile.h"
C th hn, nhng chng trnh tin x l s bt u trc khi compile. N s qut cc tp tin
ca bn tm ra nhng ch th tin x l trc, l tt c nhng dng bt u bng #.
Khi n gp directive #include, n s t ni dung ca file c ch nh vo v tr #include.
Gi s ti c mt file.c cha code ca cc function v file.h cha cc prototypes ca cc
function trong file.c
- 70 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 71 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Cui cng, m ngun ca file.c trc khi bin dch s ging nh sau:
C Code:
long myFunction(int cai_nay, double cai_kia);
void otherFunction(long value);
long myFunction(int cai_nay, double cai_kia)
{
/* Source code of function */
}
void otherFunction(long value)
{
/* Source code of function */
}
Ni dung ca file.h c t ti v tr ca dng #include.
Tht s khng c g qu kh hiu ng khng? Ti ngh rng c kh nhiu bn bit cch thc
hot ng ca n nh th no.
Chc nng ca cc #include khng c g khc ngoi hnh ng chn file ny vo file khc, v
cc bn phi bit rng vic hiu vn ny rt quan trng.
- 72 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ch th #define
Chng ta s tm hiu mt preprocessor directives mi: #define.
Lnh directive ny cho php khai bo mt hng s (constant) ca tin x l (preprocessor). N
cho php a gi tr s vo mt t.
Ly v d:
Code C:
#define MANG_SONG_NHAN_VAT_BAN_DAU 3
Bn s vit theo th t:
#define
T kha s c nhn gi tr
Gi tr
Cn ch mt cht v cch vit: tn ca constant ny thng c vit hoa ton b, ch yu l
phn bit vi nhng constant m ta c hc trc :
Code C:
const long MANG_SONG_NHAN_VAT_BAN_DAU = 3;
Nhng constant s chim mt ch trong b nh, ngay c khi gi tr khng i, s 3 s c
lu tr u trong b nh. Khng ging nh trng hp ca cc constant ca preprocessor
Vy n hot ng nh th no? l, #define s thay th tt c nhng t kha trong m ngun
bi gi tr tng ng. Tng t nh chc nng find/replace trong word bn thng s dng.
V dng:
Code C:
#define MANG_SONG_NHAN_VAT_BAN_DAU 3
S thay th tt c t MANG_SONG_NHAN_VAT_BAN_DAU c trong file bng gi tr 3
V y l mt v d:
Mt file.c trc khi qua preprocessor :
Code C:
#define MANG_SONG_NHAN_VAT_BAN_DAU 3
int main (int argc, char *argv[ ])
{
long mang_song = MANG_SONG_NHAN_VAT_BAN_DAU;
/* Code ...*/
- 73 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 74 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 75 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ti ngh rng nhng constant ny c ch trong vic khc phc li cc li chng trnh, ly v d :
C Code:
printf ("Co loi o dong %ld trong tap tin %s\n", __LINE__, __FILE__);
printf ("Tap tin nay duoc bien dich vao ngay: %s luc: %s\n", __DATE__, __TIME__);
Console:
Co loi o dong 9 trong tap tin main.c
Tap tin nay duoc bien dich vao ngay: 25 April 2015 luc: 15:36:10
- 76 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Cch xc nh n gin
Ta cng c th n gin vit:
Code C:
#define CONSTANT
m khng cn bit gi tr ca n
iu ny c tc dng bo cho preprocessor bit rng t CONSTANT c xc nh, n
khng c gi tr, nhng n tn ti .
Tht s ti khng hng th lm v n, tc dng ca n l g vy?
C l bn vn cha thy r tc dng ca n, ti s ch ra cho bn phn sau y.
Macros
Chng ta thy rng vi cc #define chng ta c th yu cu preprocessor thay th mt t kha
bng mt gi tr.
Ly v d:
Code C:
#define SOLUONG 9
... c ngha rng tt c nhng t SOLUONG trong code ca bn s c thay th bng gi tr
9. Chng ta thy rng n cng tng t nh chc nng find / replace trong Microsoft Word,
trong trng hp ny th n c thc hin bi preprocessor trc khi compilation.
Ti c mt thng tin mi cho bn!
Thc t #define c tc dng mnh hn rt nhiu, n cho php thay th c mt on code! Khi
ta s dng #define find / replace mt t bng mt on code, chng ta gi l macro.
- 77 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 78 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 79 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
iu kin - Conditions
Hy nm r: bn c th to ra nhng iu kin trong preprocessor
y l v d v cch chng hot ng:
C Code:
#if condition
/* Nhung ma nguon (source code) se duoc bien dich neu dieu kien dua ra la dung */
#elif condition2
/* Neu dieu kien tren khong dung, nhung ma nguon (source code) se duoc bien dich neu dieu
kien 2 dung */
#endif
T kha #if cho php a vo mt iu kin cho preprocessor. #elif c ngha tng t nh l
else if.
iu kin s dng li khi bn t vo n dng #endif. Bn cn ghi nh rng khng c cc ngoc
{} trong cc preprocessor.
Li ch ca chng l cho php to cc iu kin bin dch chng trnh.
Trong trng hp iu kin tha mn, on code pha sau s c bin dch. Nu khng n s b
xa i trong thi im bin dch chng trnh. V n s khng xut hin khi chng trnh hon
tt.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 80 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
#ifdef v #ifndef
By gi chng ta s thy li ch ca vic #define mt constant khng xc nh trc gi tr, nh
ti c hng dn bn trc :
C Code:
#define CONSTANT
Ta c th s dng #ifdef to ra iu kin "Nu hng s c xc nh."
#ifndef, to ra iu kin: "Nu hng s cha c xc nh."
Bn hy xem on code sau:
C code:
Code C:
#define WINDOWS
#ifdef WINDOWS
/* Ma nguon cho Windows */
#endif
#ifdef LINUX
/* Ma nguon cho Linux */
#endif
#ifdef MAC
/* Ma nguon cho Mac */
#endif
y l cch vit cc chng trnh c th hot ng trn nhiu h iu hnh khc nhau, v d
trong Windows, bn ch vic t vo #define WINDOWS, sau bin dch.
Nu bn vit chng trnh hot ng trn Linux (tt nhin l trong m ngun ca bn phi c
phn m ngun dnh ring cho Linux), bn ch cn thm vo: #define LINUX, bin dch li, v
ln ny my tnh s bin dch phn m ngun cho Linux, cc phn khc s c b qua.
- 81 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Nhng, hy ngh n trng hp c chui sau, gi s file B.h li include ngc li ni dung ca
A.h? Trng hp ny trong lp trnh thng hay xy ra.
File th nht cn file th hai chy, file th 2 li cn file th nht chy.
Hy b 10 giy suy ngh, bn s nhanh chng nhn thy chuyn g s xy ra:
1.
2.
3.
4.
5.
Khng cn phi l mt cao th hiu rng n khng bao gi kt thc ging nh cu hi "Trng
hay g c trc"
Trong thc t, v buc phi thc thin qu nhiu cc inclusion, preprocessor dng li v bo
"m, tao chn my ci inclusion c chui ny ca my lm ri !!" v t nhin vic bin dch b
crash.
Vy lm th qui no trnh cn c mng khng khip ny?
y l mt trick. V k t by gi, ti yu cu bn thc hin chng trong tt c cc file.h ca
bn, v tt nhin l khng c trng hp ngoi l:
Code C:
#ifndef DEF_FILENAME // Neu constant chua duoc xac dinh file nay chua duoc dua vao
#define DEF_FILENAME // Ta xac dinh constant de lan sau file nay se khong dua vao lai nua
/* Noi dung cua file.h (cac includes khac, cac prototypes cho cac functions, cac dong
defines...)*/
#endif
V sau bn s t vo gia #ifndef v #endif, ni dung ca file.h (cc includes khc, cc
prototypes cho cc functions, cc dng defines...)
Bn hiu r n hot ng th no ri ch? Ti khng hiu trong ln u tin khi ti c
hng dn v phn ny.
Hy tng tng, khi file.h c include ln u tin. My tnh c iu kin "Nu constant
DEF_FILENAME cha c xc nh ". V y chnh l ln u tin file c c, constant
vn cha xc nh, do , preprocessor s c ni dung bn trong if
- 82 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 83 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 84 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 85 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
V d v cu trc (struct):
Gi s bn mun to ra mt bin lu ta mt im trn mn hnh. Chc chn bn s cn
n mt cu trc nh th ny khi to ra cc game 2D trong nhng phn tip theo, y l c hi
nng cao trnh mt cht.
i vi nhng bn cha c nhiu kin thc v nhng khi nim hnh hc khng gian 2 chiu
th sau y l mt s gii thch c bn cho hnh hc 2 chiu (2D).
- 86 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 87 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
2 bin cn li kiu int lu tr cc thng tin: tui v gii tnh. Ring gii tnh l mt bin dng
boolean (bn hc cc bi trc v boolean), bin ny s tr v 1 = ng = gii tnh l nam,
tr v 0 = sai = gii tnh l n, chng ta tm chia ra 2 gii tnh thi nh ^^!
S dng cu trc:
By gi nhng cu trc ca chng ta c nh ngha trong cc file.h v chng ta c th s
dng cc function ca chng trong file.c
Vy hy cng xem lm th no to mt bin mang kiu Toadodiem (cu trc c to trn):
C code:
#include "main.h" // File.h chua cac prototypes va structs
int main (int argc, char *argv[ ])
{
struct Toadodiem diembatky; // Khoi tao bien diembatky co kieu Toadodiem
return 0;
}
Va ri chng ta to ra mt bin diembatky mang kiu bin Toadodiem. Bin ny s t
ng bao gm lun 2 bin thnh phn x v y (honh v tung ) m ta khai bo trc .
Vy chng ta c bt buc phi thm t kha struct mi ln khai bo bin khng ?
Cu tr li l C: iu ny s gip my tnh phn bit cc bin t to (VD nh bin kiu
Toadodiem) vi nhng bin c bn (VD nh bin kiu int).
Tuy nhin cc lp trnh vin thng cm thy li khi phi lun thm t kha struct mi khi
khai bo cc bin t to. gii quyt vn ny, h pht minh ra mt lnh c bit, h gi
n l typedef.
- 88 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Typedef:
Tr li vi nhng file.h c cha nhng nh ngha cu trc Toadodiem ca chng ta.
Chng ta s thm vo mt cu lnh gi l typedef to ra mt tn cu trc thay th cho ton b
cu trc .
By gi chng ta s thm vo mt dng trc khi khai bo cu trc u on code lc ny:
C code:
typedef struct Toadodiem Toadodiem;
struct Toadodiem
{
int x; // hoanh do cua diem
int y; // tung do cua diem
};
Ti s gii thch cho bn v dng mi c thm vo ny, n s c chia lm 3 phn chnh (ni
thm vi bn l ti khng h mc li khi lp li cm Toadodiem 2 ln).
1. typedef: s ch ra cho my tnh bit rng chng ta ang t mt tn thay th cho cu trc.
2. struct Toadodiem: y l tn ca cu trc m bn s t tn thay th vi typedef.
3. Toadodiem: y chnh l tn m bn t thay th cho cu trc struct Toadodiem. Bn c th
t mt tn bt k m bn thch, ti t l Toadodiem cho cc bn thy rng khi dng typedef,
bn s to ra mt cm t thay th cho cu trc vi chc nng tng ng.
- 89 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 90 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Vy tm li, truy cp vo cc bin thnh phn ca cu trc chng ta s vit theo cch sau:
C code:
tenbientutao.tenBienThanhPhanTrongCauTruc
Bin t to diembatky tch bit vi bin thnh phn x v y trong cu trc Toadodiem.
S dng cu trc Taikhoan m chng ta to u bi v vit chng trnh yu cu ngi
dng nhp tn, h sau in ra mn hnh.
on code s nh sau:
C code:
int main (int argc, char *argv[ ])
{
Taikhoan nguoidung;
printf ("Ten ban la gi ? ");
scanf ("%s", nguoidung.ten);
printf ("Ho cua ban la gi ? ");
scanf ("%s", nguoidung.ho);
printf ("Ho ten day du cua ban la %s %s", nguoidung.ho, nguoidung.ten);
return 0;
}
Console:
Ten ban la gi ? Nhan
Ho cua ban la gi ? Sieu
Ho ten day du cua ban la Sieu Nhan
Chng ta dng hm scanf nhp gi tr cho bin nguoidung.ten, c ngha l lc ny gi tr s
c truyn thng vo bin ten ca nguoidung. Bn ch vic thc hin tng t nh vy i vi
h, tui, gii tnh.
D nhin l bn cng khng cn phi hc v cu trc (struct) th mi c th vit c chng
trnh trn. Mi vic bn cn lm ch n gin l to ra cc bin lu tr tn, h ging nh cc
bi hc m ta hc trc y.
Nhng iu th v struct l bn c th to ra nhng kiu bin ring cho tng trng hp.
- 91 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Khi to mt cu trc:
i vi nhng cu trc cng ging nh cc bin, mng hay con tr, ti khuyn khch cc bn
nn khi to chng khng cha gi tr no ngay t u. Ti ni tht y, hy ti nhc li
mt cht, khi mt bin bnh thng c to ra, n s mang gi tr bt k ca a ch c my
tnh cp pht cho n. i khi bin mang gi tr 0, nhng i khi n li mang mt gi tr rc ca
mt chng trnh khc s dng trc , nhng gi tr rc ny thng khng c ngha
(chng hn nh: -69,69).
Sn tin ti s nhc li mt cht v cc cch khi to:
- 92 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
i vi cu trc (struct), vic khi to s c mt cht ging vi mng. Tht vy, chng ta cng
xem khi khi to mt bin cu trc th nh th no nh:
C code:
Toadodiem diembatky = {0, 0};
Sau khi khi to nh trn my tnh s t ng gi gi tr ln lt vo diembatky.x = 0 v
diembatky.y = 0.
Quay tr li vi cu trc Taikhoan (c cha chui k t). Bn c th bt u to ra mt chui
trong cu trc bng cch vit cp du ngoc kp " " (khng c thnh phn no cha bn trong
cp du ny). Ti cha ni cho bn bit v n nhng bi hc v chui trc y, nhng by
gi vn cha mun bit v n.
Nh , chng c th khai bo trong cu trc Taikhoan nhng thng tin nh ten, ho, diachi, tuoi,
gioitinh nh sau:
C code:
Taikhoan nguoidung = {"", "", "", 0, 0};
C nhn ti khng thng s dng cch ny. Ti thch s dng mt hm taoToadodiem vi chc
nng khi to cc bin cho bin diembatky ca ti.
lm c vic bn phi to ra bin con tr. Nu ti ch s dng bin bnh thng, mt bn
sao s c to ra trong hm (n khng phi l bin bn to) v hm s thay i gi tr ca
bn sao ch khng phi gi tr ca bin m bn khi to. Nu cm thy kh hiu on ny,
bn c th xem li bi hc c v con tr.
V vy, by gi chng ta s phi hc cch s dng con tr (pointer) trong cu trc (struct). Mi
th bt u c cht th v ri y.
- 93 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ti vn thng lm nh cch trn, v trong trng hp nh ngha nhiu con tr trn cng mt
dng th bn phi t du * trc mi con tr . VD:
C code:
Toadodiem *diembatky1 = NULL, *diembatky2 = NULL;
Gi mt hm vo cu trc:
Nhng g chng ta quan tm y l lm sao s dng mt con tr cu trc trong hm, t ta
c th thay i trc tip gi tr ca bin.
Chng ta s th vi vd ny: Chng ta ch cn n gin to ra mt bin Toadodiem v sau gi
a ch ca n vo hm taoToadodiem. Hm ny s qui nh cc thnh phn c gi tr 0.
Hm taoToadodiem s cn mt tham s (parameter): tham s l mt con tr n cu trc
Toadodiem (a *Toadodiem):
C code:
int main (int argc, char *argv[ ])
{
Toadodiem diembatkyCuatoi;
taoToadodiem(&diembatkyCuatoi);
return 0;
}
void taoToadodiem(Toadodiem* diembatky)
{
// Tao cac bien thanh phan cua cau truc o day
}
Bin diembatkyCuatoi c to ra v a ch ca n s c gi vo hm taoToadodiem,
chng ta gi bin ny l con tr (bn c th t tn n nh th no ty , iu ny khng nh
hng n hm).
No by gi i vi hm taoToadodiem, chng ta s ln lt khi to gi tr cho cc thnh phn.
ng qun t du * trc tn ca con tr truy cp vo cc bin ca n. Nu thiu du * bn
s ch thay i a ch con tr v khng phi l iu chng ta mun my tnh thc hin.
- 94 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 95 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Nhng nhng nh lp trnh vin thin ti vn thy cch ny cha nhanh, h cm thy kh
chu vi nhng cp du ngoc n. Ngay sau , nhng v li bing thng minh ny sng
to ra phm tt sau y thay th:
C code:
*diembatky -> x = 0;
Phm tt ny m phng hnh nh ca mt mi tn, n l s kt hp ca mt du tr (-) v mt
du ln ( > ).
Khi chng ta vit diembatky -> x cng tng ng vi (*diembatky).x
Nh rng bn c th s dng mi tn ( -> ) khi thao tc vi con tr v nu lm vic trc tip vi
cc bin, bn phi s dng du chm ( . ) nh chng ta hc u bi.
No hy th p dng nhng phm tt va ri vo hm taoToadodiem xem nh th no:
C code:
void taoToadodiem(Toadodiem* diembatky)
{
*diembatky->.x = 0;
*diembatky->.y = 0;
}
Hy nh r cch dng phm tt mi tn ny, chng ta s cn dng li n nhiu ln na. Cn thn
ng nhm ln gia vic dng mi tn ( -> ) vi du chm ( . ). Mi tn l dnh cho con tr, v
du chm l dnh ring cho bin.
Cng xem mt v d nh phn bit r hn gia chng nh:
C code:
int main (int argc, char *argv[ ])
{
Toadodiem diembatkyCuatoi;
Toadodiem *contro = &diembatkyCuatoi;
diembatkyCuatoi.x = 10; // Lam viec voi mot bien ta su dung dau cham
contro -> x = 10; // Lam viec voi mot con tro ta su dung mui ten
}
Gi tr ca x c gn bng 10 theo 2 cch: u tin ta lm vic trc tip trn bin, ln th hai ta
lm vic thng qua con tr.
- 96 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
S kt hp ca nhng gi tr:
Bn c thy rng ti vit IN HOA nhng gi tr trong danh sch lit k. Vic ny gi cho cc
bn nh v nhng hng s (constants) v nh ngha (defines) ng khng ?
Tht vy, n cng gn nh tng t nhng khng hon ton ging hn.
Trnh bin dch s t ng gn mt s cho tng gi tr trong danh sch lit k.
Trong trng hp danh sch lit k Volume ca chng ta, LOW mang gi tr 0, MEDIUM v
HIGH ln lt mang gi tr 1 v 2. S lin kt c my tnh t ng sp xp, v n lun bt u
bng gi tr 0.
- 97 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Khng ging nh #define l mt trnh bin dch to ra MEDIUM 1, kiu lit k khng phi l
mt tin x l. N ch gn ging thi.
Thc t l khi bn khi to mt bin music = MEDIUM, chng trnh s t gi tr 1 vo b
nh .
Vy, c li ch g khi bit trc gi tr ca MEDIUM l 1 v HIGH l 2 ?
Theo ti th khng, chng ta khng cn quan tm ti vic ny. Trnh bin dch s t ng lin kt
cc gi tr v t chng vo tng bin. Chng ta ch cn vit nh sau:
C code:
if (music == MEDIUM)
{
// Am thanh cua chuong trinh choi nhac se theo gia tri cua Volume
}
ng n gi tr ca MEDIUM l bao nhiu, bn c cho trnh bin dch t ng qun l
cc s gi tr trong danh sch.
Li ch ca vic ny l g? Vic ny gip cho code ca bn d c hn. Tht vy, mi ngi c
th d dng c hiu trc If ca bn (iu kin c hiu l nu bin music l MEDIUM th
chi nhc mc va).
Gn mt gi tr c th:
T by gi, trnh bin dch s t ng t s 0 cho gi tr th nht v ln lt tip theo l 1, 2 ,3
... theo th t.
N c th yu cu gn tng con s c th cho mi gi tr thnh phn ca kiu lit k.
l nhng g th v t n sao? No ti cho bn thy, gi s trn my tnh ca bn m lng
(volume) c qui nh cc mc t 0 n 100 (mc 0 c ngha l cm nn v 100 tc l ht ic
c tai). y chnh l c hi chng ta th gn gi tr cho cc thnh phn trong kiu lit k.
C code:
typedef enum Volume Volume;
enum Volume
{
LOW = 10, MEDIUM = 50, HIGH = 100
}
Nh cc bn thy, mc volume LOW bng 10% mc volume ca my tnh, MEDIUM th bng
50% v tng t HIGH l 100%. Ngi ta cng c th to ra mt gi tr mi tn MUTE (cm
nn). Chng ta s gn s 0 cho gi tr ny. Bn hiu ra vn ng khng.
- 98 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Tng kt:
Mt cu trc lun cha nhng bin thnh phn, nhng bin thnh phn ny l cc bin
c bn kiu int, double , tng t nh vi mng nhng cu trc c th cha nhiu bin
khc kiu.
- 99 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
M v ng mt tp tin:
c v ghi d liu trong mt tp tin chng ta s s dng cc hm (functions) c sn trong th
vin stdio m chng ta c hc trc gi.
Vng v cng chnh n l ni cha 2 function quen thuc printf v scanf. Nhng n khng
ch cha duy nht 2 function ny m cn c c nhng function c to ra lm vic vi cc
tp tin.
Tt c nhng th vin (libraries) m chng ta tng s dng cho ti nay (stdlib.h, stdio.h,
math.h, string.h ) c gi l cc th vin chun. Chng s c IDE t ng nhn din d
cho bn c chy chng trnh trn bt k h iu hnh no Windows, Linux, Mac hay mt h
iu hnh no .
Nhng th vin chun c s lng gii hn v h tr cho php bn thc hin mt s iu c bn
nh chng ta tng thy trong nhng bi trc. i vi nhng chc nng cao cp hn, nh l
m mt ca s chng trnh, ta phi ti v v ci t mt th vin mi. Chng ta s hc v
chng sau !!!
chc c th bn nn lun lun bt u nhng dng code ca mnh vi vic khai bo cc th
vin chun nh stdio.h v stdlib.h trn u tp tin file.c ca bn:
C code:
#include <stdlib.h>
#include <stdio.h>
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 100 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
fopen: hm m mt tp tin:
Trong bi hc v chui k t (string), chng ta bit cch s dng nguyn mu hm
(prototype) nh mt hng dn s dng ca hm (function). cng l thi quen ph bin
ca cc lp trnh vin, h c cc prototypes hiu v nhng functions c trong on code.
Tuy nhin ti thy rng chng ta vn cn gii thch thm mt s th:
C code:
FILE* fopen(const char* tenTaptin, const char* chedoMotaptin);
Hm ny c 2 tham s:
Tn tp tin c m.
Ch m tp tin, nhn vo tham s ny bn c th thy c n din t nhng g bn mun lm
vi tp tin: chng hn nh c hoc ghi d liu hoc c 2 chc nng cng lc.
- 101 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
FILE c ci qui g trong nhng ti ngh d c cha g i na cng khng nh hng nhiu
n cng vic ca chng ta.
- 102 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 103 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 104 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 105 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Vy tp tin ny lc no cng phi nm cng th mc cha chng trnh thc thi .exe sao?
Cng khng lun. Tp tin ny c th c t trong th mc con:
C code:
taptin = fopen("folder/test.txt", "r+");
By gi tp tin test.txt c t trong th mc con tn l folder.Phng php ny c gi l
ng dn tng i, v thng c s dng rng ri. Vi cch ny, chng trnh ca bn s
t b gp li hn.
Chng ta cng c th m mt tp tin bt k u trong cng my tnh. Trong trng hp
ny bn phi vit ng dn mt cch chnh xc v y (ta c th gi l ng dn tuyt i):
C code:
taptin = fopen("C:\\Program Files\\Notepad++\\readme.txt", "r+");
on code ny s m cc tp tin readme.txt nm trong C:\Program Files\Notepad++
Ti dng 2 du \\ mi ln r nhnh th mc nh bn thy. Nu ti ch dng mt du \
my tnh tnh s hiu nhm rng bn ang thm vo mt k t c bit nh \n hoc \t. vit
mt du \ trong chui k t, bn phi vit n 2 ln (vit l \\), lc ny my tnh s hiu rng bn
mun s dng mt du \ ny.
C mt nhc im l nhng ng dn tuyt i c th ch hot ng trn mt h iu hnh c
th. y khng phi l mt gii php linh ng. Chng hn nh cng l mt ng dn nhng
trn Linux bn phi vit nh sau:
C code:
taptin = fopen("/home/Minh/folder/readme.txt", "r+");
Ti khuyn bn nn s dng ng dn tng i thay v ng dn tuyt i. ng s dng
ng dn tuyt i nu chng trnh ca bn c vit ring cho mt h iu hnh no v
cc tp tin ca bn cng nn c lu mt th mc c th trong cng ca my tnh.
- 106 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Sau khi thc hin thao tc m tp tin chng ta c th kim tra xem c thnh cng khng. Cch
kim tra rt n gin thi: nu con tr mang gi tr NULL, m tp tin tht bi. Nu con tr mang
mt gi tr bt k no khc NULL, m tp tin thnh cng.
Chng ta s lm nh sau kim tra:
C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
taptin = fopen("test.txt", "r+");
if (taptin != NULL)
{
// khac gia tri NULL thi ban co the doc va ghi du lieu vao tap tin roi
}
else
{
// Ban co the cho no hien thi thong bao loi neu thich
printf ("Khong the mo tap tin test.txt");
}
return 0;
}
- 107 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
fclose: ng mt tp tin
Nu tp tin c m thnh cng th bn c th c v ghi thm d liu vo ni dung ca n (cht
na thi chng ta s thy cch lm).
Mt khi bn xong vic vi tp tin th bn phi ng n li ng khng? Chng ta s thc hin
thao tc ny bng fclose, vic ny c vai tr gip gii phng b nh cho my tnh, iu cng
c ngha l nhng tp tin c np vo RAM s c xa sch.
Prototype ca fclose l:
C code:
int fclose(FILE* taptin);
Hm ny ch c mt tham s: l con tr ca tp tin.
N tr v mt gi tr kiu int cho bit ng c tp tin cha, gi tr l:
- 108 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ti khng s dng else hin th thng bo li nu thao tc m tp tin tht bi. Nhng nu
mun, ti tin l bn bit cch lm m ng khng.
Hy lun nh ng tp tin li mi khi hon thnh cng vic, iu ny gip gii phng b nh ca
my tnh.
Nu bn khng gii phng b nh cho my tnh, sau khi hon thnh, chng trnh ca bn s
chim rt nhiu b nh v n c th khng s dng c. Vi nhng v d nh nh trn c l
bn s khng thy c s quan trng ca vic ny nhng trong mt chng trnh ln hn, y
tht s l mt vn quan trng.
Vic qun khng gii phng b nh trc sau g cng s xy ra v bn s gp phi mt s c
mang tn trn b nh. Chng trnh ca bn s s dng nhiu b nh hn cn thit m bn
khng hiu c l do ti sao. Thng th nguyn nhn n gin ch v 1 hoc 2 chi tit nh nh
v qun dng fclose.
Ghi vo mt tp tin:
C mt vi hm c chc nng ghi d liu vo tp tin, vic chn ra cch no thch hp nht l ph
thuc vo bn.
y l 3 hm m chng ta s hc:
- 109 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Hm fputc:
Hm ny s thm vo tp tin mi ln 1 k t. y l prototype ca n:
C code:
int fputc (int kytu, FILE* taptin);
Hm ny c 2 tham s:
Tham s 1: Bin i din cho k t c vit thm vo (bin c khai bo kiu int, nh
ti tng ni vi bn n cng tng ng khi khai bo kiu char, khc ch s k t
c th s dng y nhiu hn). VD bn c th vit trc tip k t A.
Tham s 2: Con tr n tp tin vit. theo nh vd ca chng ta con tr tn l taptin. Li
th ca vic gi con tr taptin mi ln cn s dng l c th m nhiu tp tin cng lc v
nh vy bn c th c v vit thm vo mi tp tin. Bn khng b gii hn phi m 1 tp
tin ti 1 thi im.
- 110 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Hm fputs:
Hm ny rt ging vi hm fputc, ch c mt khc bit l n s ghi vo tp tin mt chui
(string), khc vi fputc ch c th thm vo mt k t.
iu ny khng c ngha l hm fputc tr nn v dng, bn s phi s dng fputc trong nhng
trng hp chng trnh mun yu cu ngi dng in mt k t duy nht (tr li cu hi trc
nghim chng hn).
Sau y l prototype ca hm:
C code:
char* fputs(const char* chuoi, FILE* taptin);
C hai tham s ca hm ny cng rt n gin hiu:
Tham s 1: chuoi, y l chui c thm vo tp tin. rng tham s ny c kiu const
char*: bng cch thm t const vo, hm ny mun ni rng chui ny s c xem nh mt
hng s. Tm li, bn s khng th sa ni dung ca chui, iu ny s gip bn hiu l: hm
fputs ch c v thm vo chui ca bn ch n khng h thay i g ni dung chui, cng c
ngha l thng tin bn mun thm vo s c bo v an ton.
Tham s 2: taptin, tng t nh trong hm fputc, n l con tr FILE* ca bn dn tp tin
c c m.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 111 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Hm fprintf:
Sau y l mt vd khc cho hm printf. Chng ta c th s dng cch ny ghi d liu vo mt
tp tin. Cch s dng cng gn ging nh hm printf, ngoi tr vic bn phi ch nh mt con
tr v tr tham s u tin.
- 112 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bn c th vn dng li nhng kin thc hc v hm printf p dng cho vic ghi d liu
vo tp tin i vi hm fprintf. y cng l l do ti sao ti rt hay s dng fprintf mi ln mun
thm d liu vo tp tin.
- 113 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
c mt tp tin:
Chng ta s s dng li hu ht cc hm dng ghi d liu trn, ch c mt cht thay i
trong tn ca chng:
1. fgetc: c mt k t
2. fgets: c mt chui
3. fscanf: c mt chui c nh dng
Ln ny ti s i nhanh hn mt cht trong vic gii thch v nhng hm ny. Nu bn hiu
nhng g ti ni trn v vic ghi d liu vo tp tin th nhng kin thc ny ch l chuyn nh.
Hm fgetc:
Prototype l:
C code:
int fgetc(FILE* taptin);
Hm s tr v mt gi tr int, c ngha l k t c c. Ngc li nu khng th c
c, hm s tr v EOF.
- 114 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 115 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 116 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Chc hn l bn thy nhng li ch ca #define trong nhng dng code trn nhm xc nh
kch thc cho mng, VD nh SO_KY_TU_TOI_DA c s dng 2 ln trong on code:
- 117 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 118 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Nh bn s thy, hm fscanf s nhn bit 3 gi tr c phn cch nhau bng nhng khong trng
("%d %d %d"). N s a vo mng ca chng ta 3 thnh phn. Sau bn c th dng printf
hin th mi gi tr nhn c.
Bn c rng trc y ti ch t mt %d trong du ngoc kp ca hm scanf th trong
ln ny vi hm fscanf chng ta c th t mt lc nhiu %d nhp gi tr. Nu tp tin ca bn
c vit theo mt quy chun r rng th vic thu thp cc gi tr s c tin hnh d dng hn.
Di chuyn mt tp tin:
Khi ny, ti ni vi bn v mt du nhy o ng khng? By gi chng ta s tm hiu chi
tit hn thy ht cng dng ca n.
Mi ln bn m mt tp tin, s c mt du nhy o xut hin v ch ra v tr hin ti ca bn
trong tp tin. Bn c th tng tng n tng t nh du nhy trong cc trnh son tho vn bn
(Notepad hoc Microsoft Word), n ch ra v tr ca bn trong tp tin v bn s bt u c hoc
ghi thm d liu t v tr .
Tm li, du nhy o cho php bn c hoc ghi thm d liu vo mt tp tin t mt v tr c
th.
C 3 hm chng ta cn phi bit:
ftel: cho bit v tr hin ti ca bn trong tp tin.
fseek: ch nh v tr ca du nhy o ti mt khu vc c th.
rewind: a du nhy o v v tr bt u ca tp tin (tng t, chng ta cng c th s dng
fseek ch nh v tr du nhy o v v tr bt u ca tp tin).
Hm ftell: V tr hin ti trong tp tin
Cch s dng hm ny rt n gin. N tr v gi tr ca du nhy o nh mt bin kiu long.
C code:
long ftell (FILE* taptin);
Gi tr c tr v cho bit v tr hin ti ca du nhy o trong tp tin.
Hm fseek:
Prototype ca hm fseek l:
C code:
int fseek(FILE* taptin, long vitri_chuyenden, int vitri_hientai);
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 119 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
fseek (taptin, 2, SEEK_SET);
C code:
fseek (taptin, -4, SEEK_CUR);
Lu l vi gi tr m nh trn, du nhy s di chuyn ngc v trc.
C code:
fseek (taptin, 0, SEEK_END);
Nu bn ghi thm d liu vo sau v tr kt thc ca tp tin, my tnh s b sung thm d liu
cho tp tin ca bn (ln sau khi m li tp tin ny bn s thy nhng thng tin c b sung
thm v tr cui cng).
Nhng nu bn t du nhy o u tp tin v bt u ghi thm d liu vo th lc ny,
nhng d liu c s b ghi ln. Chng ta khng th chn thm d liu vo tp tin tr khi ta
dng mt hm lu li nhng d liu ng sau trc khi chng b ghi ln.
- 120 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
i tn v xa tp tin:
Chng ta s kt thc bi hc k ny vi 2 hm n gin:
rename: i tn tp tin.
remove: xa tp tin.
- 121 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 122 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 8: Cp pht ng
Tt c nhng bin m chng ta tng s dng cho n by gi u c t ng to ra bi trnh
bin dch ngn ng C. Phng php hon ton n gin d hiu. Nhng vn c mt cch th
cng hn to ra cc bin, gi l cp pht ng.
Mt trong nhng li ch chnh ca vic cp pht ng l cho php chng trnh d tr sn mt
khng gian bt buc lu tr mng trong b nh. Cho n by gi, nhng mng m chng ta
to ra u c c nh kch thc trong code. Sau bi hc ny chng ta s bit cch lm vic
vi mng mt cch linh hot hn.
Bn bt buc phi nm r cch lm vic vi con tr c th hiu c bi hc ny. Nu bn
vn cn ln tn th ti khuyn bn nn dnh cht thi gian xem li nhng kin thc ca cc bi
hc v con tr trc khi bt u.
Khi bn khai bo mt bin, c ngha l chng ta ang yu cu my tnh cp pht b nh:
C code:
int number = 0;
Khi chng trnh nhn c dng code nh trn th s xy ra nhng iu sau:
1. Chng trnh s yu cu h iu hnh (Windows, Linux, Mas Os ) cho php s dng
b nh.
2. H iu hnh s tip nhn yu cu v cho chng trnh bit ni no c th lu tr cc
bin (n s cho chng trnh a ch b nh m n d tr sn t trc).
3. Khi hm kt thc cng vic ca n th bin cng ng thi b xa khi b nh. Chng
trnh ca bn s ni vi h iu hnh rng Tao khng cn mn khng gian b nh ca
my a ch ny na, cm n nhiu!. Chuyn khng n gin l ni li cm n vi h
iu hnh m bn phi thy r khng phi ai khc, chnh h iu hnh iu khin b nh.
Cho n thi im ny mi th u din ra mt cch t ng. Mi khi khai bo bin, h iu
hnh t ng c chng trnh lin h yu cu cp pht b nh.
Vy chng ta c th lm iu ny bng tay mt cch th cng khng? Khng phi v chng ta
thch t lm kh mnh vi nhng th phc tp (k c khi n c hp dn i na), m v c i khi
ta bt buc phi t lm nh vy.
- 123 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 124 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
VD:
C code:
printf ("char : %d byte\n", sizeof(char));
printf ("int : %d byte\n", sizeof(int));
printf ("long : %d byte\n", sizeof(long));
printf ("double : %d byte\n", sizeof(double));
Mn hnh console s hin th:
char: 1 byte
int: 4 byte
di: 4 byte
Double: 8 byte
Ti khng kim tra tt c cc kiu bin m chng ta bit. Ti nhng phn cho bn
kim tra kch thc cc kiu bin khc.
Bn s nhn thy rng kiu long v int chim cng mt dung lng b nh. Vic to mt bin
kiu long cng s chim 4 byte nh khi to mt bin int.
Tht ra th kiu long chnh l long int, tng t nh kiu int. n gin l n cng ch to ra
thm mt ci tn mi ch khng c g nhiu, ch vy thi! Trc y khi b nh my tnh vn
cha tt nh by gi th nhng ci tn khc nhau ca kiu bin thc s rt hu dng cho my
tnh ca chng ta. Cc lp trnh vin ngy trc lun phi suy ngh chn kiu bin ph hp
nht tit kim ti a b nh.
Ngy nay th dung lng b nh my tnh thc s rt ln v vn ny khng cn qu
quan trng. Nhng vn c nhng ngi thch to ra nhng chng trnh chim t b nh nht c
th. Ti ngh rng l cc chng trnh cho in thoi di ng, robot
Vy chng ta c th bit kch thc ca nhng kiu bin ty chnh do mnh to ra (chng
hn nh i vi cu trc structure)
- 125 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 126 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Gi s bin c cp pht cho a ch 1600 trong b nh. Chng ta cng xem hnh sau thy r
hn:
- 127 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Vy thm ch mng khng cha g trong th n vn chim trc 400 byte b nh sao?
D nhin ri! Cc khng gian b nh c d tr sn, khng c mt chng trnh no khc c
th chm vo n (ngoi tr s tc ng ca bn). Mt khi bin c khi to, n s ngay lp
tc chim mt vng trong b nh.
- 128 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Mi khi mun thc hin vic cp pht b nh ng theo cch th cng, bn nn thc hin ln
lt 3 bc sau:
1. Gi hm malloc yu cu cp pht b nh.
2. Kim tra gi tr tr v ca hm malloc bit h iu hnh c cp pht b nh thnh
cng hay khng.
3. Sau khi s dng xong bn phi tin hnh gii phng b nh bng hm free. Nu chng ta
khng lm thao tc ny, chng trnh ca bn s d gp phi vn trn b nh, khi
c hon tt chng trnh ca bn s chim mt dung lng b nh khng l m trong
c nhng vng nh b s dng khng cn thit.
Ba bc ny c gi li cho bn nhng g hc v thao tc vi tp tin khng? C y! V
nguyn tc, n gn nh ging vi nhng g bn hc khi thao tc vi cc tp tin: u tin n s
c cp pht bt nh, sau kim tra xem vic cp pht c thnh cng khng, v khi c
cp pht n s s dng vng b nh , s dng xong th gii phng vng nh cho chng trnh
khc c th s dng tip.
- 129 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 130 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 131 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
V d c th.
Chng ta s sp xp li mt s kin thc bn c hc trc y: Hi tui ca ngi dng v
in n ra.
iu khc bit duy nht so vi nhng g chng ta tng lm trc l ln ny cc bin s
c phn b mt cch th cng (cn gi l cp pht ng) ch khng phi t ng nh trc
y.
- 132 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
V vy cho nn nhng dng code nhn s phc tp hn. Nhng cc bn hy c gng hiu c n
i, iu ny tht s quan trng y:
C code:
int main (int argc, char *argv[ ])
{
int* capphatBonho = NULL;
capphatBonho = malloc(sizeof(int)); // Cap phat bo nho
if (capphaBonho == NULL)
{
exit(0);
}
// Su dung bo nho
printf ("Ban bao nhieu tuoi ? ");
scanf ("%d", capphatBonho);
printf ("Ban %d tuoi\n", *capphatBonho);
free(capphatBonho); // Giai phong bo nho
return 0;
}
Console:
Ban bao nhieu tuoi ? 69
Ban 69 tuoi
- 133 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Tr li vi on code ca chng ta. Bin kiu int c cp pht ng. Suy cho cng nhng g
bn vit cng ging nh trc y khi tin trnh ny din ra mt cch t ng:
C code:
int main (int argc, char *argv[ ])
{
int bienCuatoi = 0; // Cap phat bo nho (qua trinh dien ra hoan toan tu dong)
// Su dung bo nho
printf ("Ban bao nhieu tuoi ? ");
scanf ("%d", &bienCuatoi);
printf ("Ban %d tuoi\n", bienCuatoi);
return 0;
} // Giai phong bo nho (dien ra tu dong moi khi ket thuc ham)
Tm li c 2 cch to mt bin, hay c th ni l yu cu my tnh cp pht b nh. Hai cch
l:
- 134 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 135 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
int main (int argc, char *argv[ ])
{
int soluongBanbe = 0, i = 0;
int* tuoiBanbe = NULL; // con tro nay se duoc su dung nhu mot mang sau khi dung malloc
// Chung ta se yeu cau nguoi dung cho biet so luong ban be cua ho
printf ("Ban co bao nhieu nguoi ban ? ");
scanf ("%d", &soluongBanbe);
if (soluongBanbe > 0) // Phai co it nhat mot nguoi ban (xin chia buon neu ko co ai ^^!)
{
tuoiBanbe = malloc(soluongBanbe * sizeof(int)); // Phan phoi bo nho cho mang
if (tuoiBanbe == NULL) // Kiem tra xem viec cap phat bo nho co thanh cong ko?
{
exit(0); // Chuong trinh ngung lai ngay lap tuc
}
// Yeu cau nhap tuoi tung nguoi ban
for (i = 0 ; i < soluongBanbe ; i++)
{
printf ("Nguoi ban thu %d bao nhieu tuoi ? ", i + 1);
scanf ("%d", &tuoiBanbe[i]);
}
// Lan luot hien thi tuoi cua ban be
printf ("\n\nTuoi cua ban be ban la :\n");
for (i = 0 ; i < soluongBanbe ; i++)
{
printf ("%d tuoi\n", tuoiBanbe[i]);
}
// Giai phong bo nho da duoc cap phat cho mang boi malloc, no ko con can thiet nua.
free(tuoiBanbe);
}
return 0;
}
- 136 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Console:
Ban co bao nhieu nguoi ban ? 5
Nguoi ban thu 1 bao nhieu tuoi ? 18
Nguoi ban thu 2 bao nhieu tuoi ? 19
Nguoi ban thu 3 bao nhieu tuoi ? 20
Nguoi ban thu 4 bao nhieu tuoi ? 21
Nguoi ban thu 5 bao nhieu tuoi ? 22
Tuoi cua ban be ban la :
18 tuoi
19 tuoi
20 tuoi
21 tuoi
22 tuoi
Chng trnh c v khng ng dng c g nhiu trong thc t nhng ti chn lm n v n kh
n gin cc bn c th hiu c cch lm vic ca hm malloc.
Ti m bo vi bn rng nhng bi hc sau, chng ta s c c hi s dng hm malloc lu
tr nhng th th v hn l tui ca bn b ngi dng.
Tng kt:
Mt bin s chim khng gian b nh nhiu hay t l ty thuc vo kiu ca n (int hay
double hay char )
- 137 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bi 9: Test Program
Tr chi ngi treo c
Ch ni ko thi th cha : Chc hn l cc bn hiu r tm quan trng ca vic thc hnh ng
khng? Ti chc chn vic thc hnh tht s cn thit i vi bn, chng ta va c hc rt
nhiu nhng khi nim, l thuyt v bt c iu g bn c c, nhng g bn ni ra, bn s
khng bao gi thc s hiu su v n cho n khi bn bt tay vo thc hnh.
Trong ln hc ny, ti ngh chng ta s lm ra tr chi Ngi treo c. y l mt tr chi
c in quen thuc v cc t (bn no xi kim t in th bit ngay tr ny), bn s phi on
nhng ch ci b n trong cc t. Tr ngi treo c ln ny s c chi theo kiu ca ngn ng
C trn mn hnh console.
Mc ch chnh ca chng ta l gip bn c th nm vng tt c nhng kin thc c hc
trc gi. Nhng con tr (pointer), chui k t (string), tp tin (file), mng (array), cu trc
(structure) ok, tt c s n thi.
Mt s ch dn.
Ti mun ni mt cht v nhng nguyn tc hot ng ca tr Ngi treo c. By gi ti s
a cho bn mt s ch dn, ng thi ti ngh sau ny bn cng nn gii thch cho ngi khc
bit cch hot ng ca tr chi m bn to ra.
a phn chng ta u tng bit qua tr ngi treo c ri ng ko? Nhng m by gi nhc
li mt cht v cch chi cng ch mt g ng ko: Mc tiu ca tr chi l tm ra t b n sau
ti a 10 ln on (bn cng c th t mnh thay i s ln on ti a ty chnh kh).
Quy cch chi.
Gi s t kha b n l RED.
Bn on ch A v my tnh s kim tra xem ch A c nm trong t ang b n ko.
Hy nh l c sn mt hm trong th vin string.h c th tm mt ch ci trong mt t !
(hm strchr). Tuy nhin, bn khng cn s dng n (bn thn ti cng t khi dng n).
C 2 kh nng s xy ra:
- 138 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Bn cng bit trong thc t khi chi tr ny trn my tnh hoc kim t in th mi ln
chng ta on sai, hnh nh mt ngi b treo c s c v thm vo 1 nt cho n khi bn on
ng t b n hoc on sai ht th hnh v hon thnh (cng c ngha l b treo c v thua). Vi
console th chng ta ko thit k sinh ng nh vy c v ch hin th ch ci c thi, v vy
c g xi ny, chng ta s hin th mt cu thng bo Bn cn xxx ln on trc khi ngi ny
b treo c mi khi on sai cho n khi ht lt on.
Gi s ngi chi on ch D (trong trng hp t b n l RED). R rng l ch D c cha
trong t RED, v vy s lt on ca ngi chi s khng b gim i. Mn hnh s hin th t b
n cng vi ch ci m bn va on ng, n s trng nh th ny:
Console:
Tu bi an: **D
V nu sau ngi ta on ch R, li tip tc c ch R, mn hnh s hin th mt ln na t b
n km theo nhng t bn on ng, nh sau:
Console:
Tu bi an: R*D
- 139 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 140 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Chuyn g xy ra?
Tht ra th, khi bn nhp mt ch ci mn hnh console, tt c mi th bn g vo c lu
tr u trong b nh, v n cng c bao gm c k t ENTER (\n).
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 141 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 142 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Sao li xut hin du chm phy v tr kt thc dng cha vng lp while v chng ta
cng khng thy cp ngoc nhn ca vng lp nh ta hc cc bi trc.
Nh bn thy, vng lp while ca chng khng cha nhng cu lnh (instructions), n ch
cha duy nht hm getchar trong phn iu kin. Trong trng hp ny, s dng cp ngoc nhn
cho vng lp l khng cn thit, v vy ti s dng du chm phy thay cho cp du { }.
Du chm phy ny cng c ngha l Khng cn lm g mi ln qua vng lp.
y l mt cht k thut c bit c s dng bi rt nhiu lp trnh vin v ti ngh bn cn
phi bit ng dng cho nhng vng lp cc ngn v n gin.
Nhng nu l bn khng bit k thut c bit trn th vng lp trong code ca bn s nh sau:
C code:
while (getchar( ) != '\n')
{
}
Khng c g trong cp du ngoc nhn l hon ton bnh thng, bi v trong trng hp ny
chng ta tht s khng c cu lnh no cn thc hin c. Vic s dng du chm phy thay th
cho cp du ngoc nhn ch gip code ca bn gn gng hn thi.
Cui cng, hm docKytu s tr v k t u tin n c c, cng chng l gi tr ca bin kytu.
Tm li, c c mt t trong code ca bn, chng ta s khng s dng:
C code:
scanf ("%c", &chuCaiBiMat);
Thay vo chng ta s dng mt cch cao cp hn:
C code:
chuCaiBiMat = docKytu( );
Danh mc t b n:
Bt u chng trnh test ca bn, ti s yu cu bn t nhng t b mt trc tip vo nhng
dng code. V d nh sau:
C code:
char tuBimat [ ] = "LOVE"
- 143 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 144 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
gii quyt vn , c hai gii php. Bn c th nh ngha s t cha trong danh mc ngay
dng u tin ca tp tin:
3
LOVE
MONEY
LIFE
Tuy nhin, cch ny hi nhm chn, bi v chng ta s phi t mnh cp nht li thng s mi
ln thm vo 1 t trong danh mc (cch ny vn cn 1 cht bt tin im ny). V vy ti gi
cc bn c th to ra chc nng t ng m s t c cha trong tp tin danh mc t b n cho
chng trnh ca bn. Cng n gin thi, tng lin quan n vic m k t \n mi dng
trong tp tin.
Mi ln chng trnh c tp tin, n s m k t \n li t u. Sau bn s ly kt qu m
c th vo con s m chng trnh s chn ngu nhin gia s 0 v n chn ra t s
c lu vo b nh khi tr chi bt u.
Ti nhng cho bn suy ngh v gii php ny y. Ti s khng gip bn thm na nu khng
y u cn l chng trnh test ca bn na. Hy s dng tt c nhng kin thc m bn
c hc, bn hon ton c th thit k tr chi ny theo nh ti ni. C th s mt t nhiu
thi gian cng nh bn s cm thy d hoc kh nhng hy c gng t mnh sp xp, t chc
mi th theo cch ca bn (nh to function cho nhng g bn mun chng trnh lm nh),
ri bn cng s lm c thi.
Chc may mn, v hn na l ng nn ch !!!
- 145 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Ti cng tng qun nhng kin thc c bn nh: qun khi to gi tr khi khai bo bin, qun
t cc nguyn mu hm (prototype) hoc xa i nhng bin khng cn gi tr s dng trong
chng trnh gii phng b nh. Thm ch, ti phi th nhn vi bn l ti cn qun c vic
t du chm phy cui cu lnh (instruction).
Ti ni vi bn nhng iu trn lm g? Ti khng hon ho, v cuc sng cng nh vy,
lun c nhng sai lm. LP TRNH CNG NH VY BN S TIP TC VI N
CH!!! YES OR NO ???
Ok, by gi ti s cho bn thy gii php qua 2 giai on:
1. u tin ti s cho cc bn thy lm th no chng trnh x l cc k t c n sau
mi lt on ca ngi dng. Ti chn t FACEBOOK v n cho php ti kim tra xem
mnh c gii quyt c trng hp c 2 k t ging nhau trong mt t khng.
2. Sau ti s cho bn thy lm th no qun l tp tin danh mc t b n thm vo
cc t b n cho tr chi.
D c th nhng ti s khng vit ton b code cho bn thy mt ln. S rt di v nhn kh kinh
khng, ti s s lm cc bn b chong.
Ti s c gng gii thch l do ti sao ti khng lm vy. Hy khoan qu khao kht t c kt
qu bn mun, m quan trng l cch t duy ca chng ta v vn . Hy tp trung phn tch
vo cch gii quyt vn trc nh.
Phn tch hm main:
Nh mi ngi vn thng ni rng mi th u bt u t i tay. Hehe. ng qun thm
vo nhng th vin stdio, stdlib, ctype (th vin ny s dng hm toupper ( ) nh). Chng tht
s hu ch v cn thit cho chng trnh ca bn y:
C code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char* argv[ ])
{
return 0;
}
Ok, n lc ny th chng ta nn lm theo ti. Ri chng ta s thy c s hu ch ca nhng
th vin, chng ta s c th qun l chng trnh v hu ht cc function trong chng trnh s
cn n nhng th vin ny.
- 146 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
No, hy bt u bng vic khai bo nhng bin cn thit. Hy yn tm, ti khng ngh ht v
tt c nhng bin cn khai bo cho chng trnh cng mt lc, t ra th vn t hn ln u tin ti
tp tnh vit code:
C code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char* argv[ ])
{
char kytu = 0; // Bien nay se luu tru ky tu cua nguoi choi (duoc tra ve boi ham scanf)
char tuBimat[ ] = "FACEBOOK"; // Day la tu bi mat can tim ra
int sokytuBimat[8] = {0}; /* Mot mang co chua cac thanh phan dang Bolean. Moi o trong
mang se tuong ung voi mot ky tu nguoi choi se doan. Neu doan dung thi gia tri = 1, va neu sai thi
gia tri = 0 */
int soluotDoan = 10; // So luot doan con lai cua nguoi choi (0 = thua)
int i = 0; // Bien ho tro
return 0;
}
Ti c tnh khai bo mi bin trn mt dng ring bit v ghi ch thm cho tng bin cc
bn d hiu. Trong thc t, bn khng bt buc phi ghi ch tt c ra nh th v c th khai bo
tt c nhng bin cng kiu trn cng mt dng.
Cc bin trn c khai bo kh hp l ng khng: bin kytu lu tr k t ngi chi on
c, bin tuBimat lu tr t b mt ca chng ta, boen soluotDoan m s lt on cn
li ca ngi chi (lt on = 0 ngha l thua)
Bin i l bin h tr ti lm vic vi mng, vng lp, n s gip bn kt thc vng lp.
Cui cng, bin m bn cn phi ngh n nht, th khc bit vi nhng bin cn li, mng
sokytuBimat cha cc thnh phn kiu Bolean. th bn s thy ti quy nh kch thc
sn cho n ng vi s k t ca t b n (l 8 k t). Khng phi mt s ngu nhin nh: mi
mt thnh phn trong mng i din cho mt k t ca t b mt. u tin i din cho k t
u tin, th 2 l k t th 2 v c th cho n k t cui.
Gi tr ca cc thnh phn trong mng c khi to lc u bng 0, iu ny cng c ngha l
khng tm thy k t no. V theo tin trnh hot ng ca game, gi tr ny s c thay i
tng ng vi din bin tr chi. Mi mt khi c k t c tm ng, gi tr ca thnh phn
trong mng sokytuBimat s mang gi tr 1, ngc li l gi tr 0.
- 147 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 148 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 149 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
if (win(sokytuBimat))
printf ("\n\n Chuc mung, ban da chien thang ! Tu bi mat la : %s", tuBimat);
else
printf ("\n\n Xin chia buon, ban da thua !\n\n Tu bi mat la : %s", tuBimat);
return 0;
}
Chng ta dng hm win kim tra xem ngi chi c thng hay khng hin th thng bo
cho h bit.
Phn tch hm win:
By gi chng ta s thy code ca hm win:
C code:
int win(int sokytuBimat[ ])
{
int i = 0;
int nguoichoiChienThang = 1;
for (i = 0 ; i < 6 ; i++)
{
if (sokytuBimat[i] == 0)
nguoichoiChienThang = 0;
}
return nguoichoiChienThang;
}
Hm ny ly tham s l mng sokytuBimat cha gi tr dng Boolean. Hm s tr v mt gi tr
true nu ngi chi thng, hoc gi tr flase nu khng thng.
Code ca hm ny nhn kh n gin ng khng, chc l cc bn u c hiu ng khng.
Chng ta s kim tra th xem trong mng sokytuBimat c no cha gi tr 0 khng. Nu xut
hin bt k no trong mng c gi tr 0, iu c ngha l ngi chi khng thng c, lc
ny bin nguoichoiChienThang (bin kiu Boolean) s mang gi tr false tng ng bng 0.
V nu tt c cc k t u c tm thy, bin ny s c gi tr true tng ng bng 1, v
hin nhin hm ny cng s tr v gi tr 1 lun.
- 150 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
C code:
int kiemtraKytu(char kytu, char tuBimat[ ], int sokytuBimat[ ])
{
int i = 0;
int kytuChinhXac = 0;
// Kiem tra xem ky tu cua nguoi choi da doan co nam trong tu bi mat ko
for (i = 0 ; tuBimat[i] != '\0' ; i++)
{
if (kytu == tuBimat[i]) // Neu ky tu co chua trong tu bi mat
{
kytuChinhXac = 1; // Ky tu se duoc luu tru gia tri the hien no la ky tu chinh xac
sokytuBimat[i] = 1; // Gui gia tri 1 vao o tuong ung voi vi tri cua ky tu do trong mang
}
}
return kytuChinhXac;
}
Hm s kim tra k t m ngi dng nhp vo c nm trong k t b mt khng. Nu c, c
2 iu s din ra:
- 151 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 152 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Xem th no:
C code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "danhmuc.h"
Hm chonTu:
Hm ny s cn mt tham s. l mt con tr n vng b nh, ni m n c th lu tr t
ngu nhin trong danh mc vo. Con tr ny s c cung cp bi main ( ).
Hm s tr v mt gi tr kiu int v n c kiu Boolean: gi tr 1 nu mi vic din ra tt p v
0 nu c bt k li g xy ra.
Sau y l on u ca hm:
C code:
int chonTu(char *tuDuocChon)
{
FILE* danhmuc = NULL; // Con tro tap tin de chua cac tap tin cua chung ta
int soThuTuCuaTu = 0, soThuTuCuaTuDuocChon = 0, i = 0;
int luuKytu = 0;
Ti to mt s bin cn thit cho chng trnh ca chng ta. Trong main ( ), c th bn thy
ti khng to ra tt c bin cng mt lc ngay khi mi bt u, c nhng th bn c th to ra
sau nu bn nhn thy bn cn n chng.
Tn ca cc bin trn cng cho bn thy nhim v, chc nng ca chng ri. Chng ta c con
tr danhmuc c tp tin danhmuc.txt, nhng bin tm thi lu tr k t
Bn c ti khai bo kiu int cho bin luuKytu lu tr k t? Hi l ng khng, bi v
hm fgetc m t na ti s dng n tr v mt gi tr kiu int, vy nn tt nht l nn lu tr kt
qu ca chng ta kiu int.
- 153 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
No xem th nh:
C code:
danhmuc = fopen("danhmuc.txt", "r"); // Tap tin duoc mo trong che do "read-only"
// Chung ta kiem tra xem thao tac mo tap tin co thanh cong khong
if (danhmuc == NULL) // Neu ban khong the mo tap tin
{
printf ("\n Khong the mo danh muc tu bi mat");
return 0; // Tra ve gia tri 0 cho biet thao tac mo tap tin that bai
// Sau khi nhan duoc gia tri tra ve cua return, ham ket thuc.
}
Khng c qu nhiu iu mi m y. Ti chn ch m tp tin danhmuc.txt l read-only
(bng cch chn r) v kim tra xem thao tc ny c thnh cng hay khng bng cch s dng if
nu gi tr tr ca danhmuc l NULL th r rng vic m tp tin tht bi (c th chng trnh
khng tm thy tp tin danhmuc.txt hoc n ang c chng trnh khc s dng). Trong
trng hp ny, mn hnh s hin th thng bo li v gi tr tr v l 0.
Ti sao return li nm v tr . Tht ra th, return c chc nng dng cc hot ng ca hm
li. Nu khng th m c tp tin, hm s dng li ti v my tnh cng s khng tip tc
c thm g na. N tr v gi tr 0 cho bit rng hm ny khng thc hin c.
V y l phn cn li ca hm, gi s vic m tp tin thnh cng:
C code:
// Dem cac tu duoc chua trong tap tin (chi viec dem co bao nhieu ky tu \n thoi)
do
{
luuKytu = fgetc(danhmuc);
if (luuKytu == '\n')
soThuTuCuaTu ++;
} while(luuKytu != EOF);
Bn thy g khng, chng ta s c qua ton b tp tin nh vo hm fgetc (v c ln lt tng
k t mt nh). Chng trnh ch vic m s ln xut hin k t \n. Mi ln k t \n xut hin,
gi tr ca bin soThuTuCuaTu s tng thm 1.
Vi phn code ny, chng ta s bit c c bao nhiu t b mt nm trong tp tin. V nh l
mi mt dng trong tp tin ch cha 1 t thi nh.
C code:
soThuTuCuaTuDuocChon = tuNgauNhien(soThuTuCuaTu); // Chon mot tu ngau nhien
- 154 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 155 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 156 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
Tp tin danhmuc.c
V sau y l ton b ni dung ca tp tin danhmuc.c, xin mi cc bn thng thc:
C code:
/*
Nguoi Treo Co
danhmuc.c
-----Nhung function nay se chon ra mot tu ngau nhien trong tap tin chua danh muc tu bi an cua tro
choi Nguoi Treo Co
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "danhmuc.h"
// Chung ta kiem tra xem thao tac mo tap tin co thanh cong khong
if (danhmuc == NULL) // Neu ban khong the mo tap tin
{
printf ("\n Khong the mo danh muc tu bi mat");
return 0; // Tra ve gia tri 0 cho biet thao tac mo tap tin that bai
// Sau khi nhan duoc gia tri tra ve cua return, ham ket thuc.
}
- 157 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
// Dem cac tu duoc chua trong tap tin (chi viec dem co bao nhieu ky tu \n thoi)
do
{
luuKytu = fgetc(danhmuc);
if (luuKytu == '\n')
soThuTuCuaTu++;
} while(luuKytu != EOF);
soThuTuCuaTuDuocChon = tuNgauNhien(soThuTuCuaTu); // Chon mot tu ngau nhien
// Chuong trinh doc lai tu dau tap tin va ngung lai khi tim thay tu ngau nhien duoc chon
rewind(danhmuc);
while (soThuTuCuaTuDuocChon > 0)
{
luuKytu = fgetc(danhmuc);
if (luuKytu == '\n')
soThuTuCuaTuDuocChon--;
}
/* Con tro tap tin danhmuc duoc dat dung vi tri cua no.
Chung ta su dung ham fgets va quy dinh ham khong doc qua so luong ky tu cho phep*/
fgets(tuDuocChon, 100, danhmuc);
// Chung ta se thay the ky tu \n
tuDuocChon[strlen(tuDuocChon) - 1] = '\0';
fclose(danhmuc);
return 1; // Gia tri tra ve = 1, tat ca deu hoat dong tot
}
int tuNgauNhien(int sothutuLonNhat)
{
srand(time(NULL));
return (rand( ) % sothutuLonNhat);
}
- 158 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 159 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
- 160 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
/*
Nguoi Treo Co
main.c
-----Nhung function nay se chon ra mot tu ngau nhien trong tap tin chua danh muc tu bi an cua tro
choi Nguoi Treo Co
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "danhmuc.h"
int win(int sokytuBimat[ ], long dodaiTu);
int kiemtraKytu(char kytu, char tuBimat[ ], int sokytuBimat[ ]);
char docKytu( );
int main(int argc, char* argv[ ])
{
char kytu = 0; // Bien nay se luu tru ky tu cua nguoi choi (duoc tra ve boi ham scanf)
char tuBimat[100] = {0}; // Day la tu bi mat can tim ra
int *sokytuBimat = NULL; /* Mot mang co chua cac thanh phan dang Bolean. Moi o trong
mang se tuong ung voi mot ky tu nguoi choi se doan. Neu doan dung thi gia tri = 1, va neu sai thi
gia tri = 0 */
long soluotDoan = 10; // So luot doan con lai cua nguoi choi (0 = thua)
long i = 0; // Bien ho tro
long dodaiTu = 0;
printf ("Chao mung den voi tro choi Nguoi treo co !\n\n ");
if (!chonTu(tuBimat))
exit(0);
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 161 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
dodaiTu = strlen(tuBimat);
sokytuBimat = malloc(dodaiTu * sizeof (int)); /* mang sokytuBimat se duoc cap phat dong bo
nho (luc dau chung ta khong biet duoc kich thuoc cua mang nay) */
if (sokytuBimat == NULL)
exit(0);
for (i = 0 ; i < dodaiTu ; i++)
sokytuBimat[i] = 0;
/* Chung ta se tiep tuc tro choi neu con it nhat mot luot doan
Va van chua tim duoc tu bi mat*/
while (soluotDoan > 0 && !win(sokytuBimat, dodaiTu))
{
printf ("\n\n Ban co %d luot doan de choi ", soluotDoan);
printf ("\n Tu bi mat la gi ?");
/* Hien thi nhung ky tu bi mat va an di nhung ky tu chua duoc tim thay
Vi du: *A***OO*/
for (i = 0 ; i < dodaiTu ; i++)
{
if (sokytuBimat[i]) // Neu nguoi choi tim duoc ky tu thu i
printf ("%c", tuBimat[i]); // Hien thi ky tu thu i duoc tim thay
else
printf ("*");// Hien thi dau * doi voi nhung ky tu chua duoc tim thay
}
printf ("\n Xin moi ban doan mot ky tu: ");
kytu = docKytu( );
// Neu ky tu nhap vao khong dung
if (!kiemtraKytu(kytu, tuBimat, sokytuBimat))
{
soluotDoan--; // Giam bot mot lan doan cua nguoi choi
}
}
if (win(sokytuBimat, dodaiTu))
printf ("\n\n Chuc mung, ban da chien thang ! Tu bi mat la : %s", tuBimat);
Dch gi: Mr. Hung
daihung.pham@yahoo.fr
- 162 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
else
printf ("\n\n Xin chia buon, ban da thua !\n\n Tu bi mat la : %s", tuBimat);
free (sokytuBimat); // Giai phong bo nho da duoc phan bo (boi ham malloc)
return 0;
}
char docKytu( )
{
char kytuNhapVao = 0;
kytuNhapVao = getchar( ); // Doc ky tu duoc nhap dau tien
kytuNhapVao = toupper(kytuNhapVao); // Viet hoa ky tu do
// Lan luot doc tiep cac ky tu khac cho den khi gap \n
while (getchar( ) != '\n') ;
return kytuNhapVao; // Tra ve ky tu dau tien doc duoc
}
int win(int sokytuBimat[ ], long dodaiTu)
{
long i = 0;
int nguoichoiChienThang = 1;
for (i = 0 ; i < dodaiTu ; i++)
{
if (sokytuBimat[i] == 0)
nguoichoiChienThang = 0;
}
return nguoichoiChienThang;
}
int kiemtraKytu(char kytu, char tuBimat[ ], int sokytuBimat[ ])
{
long i = 0;
int kytuChinhXac = 0;
- 163 -
Editor: M0N1M
thaibaminh2512@gmai.com
www.siteduzero.com
Tc gi: M@teo21
// Kiem tra xem ky tu cua nguoi choi da doan co nam trong tu bi mat ko
for (i = 0 ; tuBimat[i] != '\0' ; i++)
{
if (kytu == tuBimat[i]) // Neu ky tu co chua trong tu bi mat
{
kytuChinhXac = 1; // Ky tu se duoc luu tru gia tri the hien no la ky tu chinh xac
sokytuBimat[i] = 1; // Gui gia tri 1 vao o tuong ung voi vi tri cua ky tu do trong mang
}
}
return kytuChinhXac;
}
tng ci tin:
Ch, tr Ngi treo c ny c hi phc tp vi bn khng. By gi bn c mt chng
trnh chn ra t ngu nhin t mt tp tin ri ng khng.
Sau y l mt s tng ci tin bn th sc:
Hin nay, chng ta ch mi cho php mi ngi chi mt ln. Ngha l chng trnh s
ngng li khi c ngi chin thng hoc s dng ht lt on. By gi, bn hy th to
mt yu cu ngi chi xem h c mun chi li khng.
Bn cng c th to ra ch chi 2 ngi, ngi th nht s nhp t b n vo cho
ngi th 2 on.
Mc d khng bt buc nhng sao bn khng th v hnh ngi b treo c trn mn hnh
console (nh cc kim t in hay c) gi l bn c th lm bng hm printf.
- 164 -
Editor: M0N1M
thaibaminh2512@gmai.com