Vous êtes sur la page 1sur 164

Ti liu hng dn lp trnh C

Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

1) Modular Programming (M-un Lp trnh)


Prototypes.
Headers.
Separate Compilation.
Phm Vi S Dng (scope) ca
functions v bin s.

5) Preprocessor Tin x l
#include.
#define.
Macro.
Condition.

6) To ra nhng bin kiu ring ca bn


Cu trc (struct).
Mng cu trc.
Typedef.

2) Pointer (Con tr)


Vn nan gii.
a ch trong b nh.
Cch s dng pointer (con tr).
Cch s dng con tr trong mt
function.

7) Nhng thao tc lm vic vi tp tin (file)


M v ng tp tin.
Ghi d liu vo tp tin.
c d liu trong tp tin.
Di chuyn tp tin.
i tn v xa tp tin.

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

9) Test Program: Ngi Treo C


Mt s ch dn.
Gii php 1:
Gii php 2:
tng ci tin.

-1-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Ch : ti s khng t instruction system ("PAUSE") vo pha cui ca main ( )


na. Hy thm vo nu bn cn n. V ti vn khuyn bn s dng IDE Code::Blocks. V
IDE ny c update khng phi t instruction system ("PAUSE") pha cui main
( ) na.

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 !

Nhng vn ny kh bt li, ng khng?


Ti ng vi bn v im ny !
Nhng bn hy yn tm, nhng nh lp trnh trc cng gp iu tng t v h tm cch
khc phc n.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

-2-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nh vo nhng g ti sp ch cho bn sau y, bn s c th t cc functions theo bt k th t


no bn mun trong code source.

Prototype bo trc mt function


Chng ta bt u vic bo trc cho my tnh nhng function ca chng ta bng cch vit cc
prototypes.

Ti bit bn ang ngh t ng mang m cht high-tech prototypes ny l th g gh gm


lm nhng tht ra n l mt th hon ton ngu ngc.

Hy cng xem on code u tin ca function dientichHinhChuNhat:

C code:
double dientichHinhChuNhat (double chieuRong, double chieuDai)
{
return chieuRong * chieuDai;
}

Hy copy li dng u tin (double dientichHinhChuNhat...) v chp vo phn u ca file


source ca bn (sau nhng dng #include). V thm vo mt du chm phy cui cng.

Vy l xong ! By gi bn c th t function sau main nu bn mun.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-3-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

V on code s thay i nh sau:


C code:
#include <stdio.h>
#include <stdlib.h>
// Doan code sau chinh la prototype cua function dientichHinhChuNhat :
double dientichHinhChuNhat (double chieuRong, double chieuDai);
int main (int argc, char *argv[ ])
{
printf ("Hinh chu nhat voi chieu rong 5 va chieu dai 10 co dien tich la %f\n",
dientichHinhChuNhat(5, 10));
printf ("Hinh chu nhat voi chieu rong 2.5 va chieu dai 3.5 co dien tich la %f\n",
dientichHinhChuNhat(2.5, 3.5));
printf ("Hinh chu nhat voi chieu rong 4.2 va chieu dai 9.7 co dien tich la %f\n",
dientichHinhChuNhat(4.2, 9.7));
return 0;
}
// function dientichHinhChuNhat bay gio co the dat o bat ki vi tri nao trong code source
double dientichHinhChuNhat (double chieuRong, double chieuDai)
{
return chieuRong * chieuDai;
}

V iu thay i y l, dng prototype c thm vo phn u code source.


Mt prototype tht ra l li ch dn cho my tnh. N s thng bo vi my tnh c s tn ti ca
function (dientichHinhChuNhat) vi nhng tham s (parameters) cn a vo v type gi tr s
xut ra. Nh vy m my tnh c th t sp xp.
V cng nh vo dng code ny, bn khng cn au u khi chn v tr t function na.
Hy lun vit prototypes ca cc functions c trong chng trnh. Chng trnh ca bn s
khng h b chm hn khi s dng nhiu function u: v bn nn tp mt thi quen tt k t
by gi, hy t prototype cho mi functions bn vit.
Chc bn cng thy function main khng c prototype. V y cng l function duy nht khng
cn prototype, bi v my tnh bit r n l g ri (tt c cc chng trnh u dng n m,
n bt buc phi bit thi).

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-4-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

V vy n gin hn ta c th vit nh sau:


C code:
double dientichHinhChuNhat (double , double);
V vi 2 cch vit , chng trnh u chy tt, nhng li ch ca cch vit u tin l bn c
th copy-paste nhanh chng v ch thm vo mi du chm phy cui.

NG QUN t du chm phy cui mt prototype. V n gip cho my


tnh c th nhn ra s khc nhau gia prototype v function. Nu bn khng lm
vy, bn s mc li khi bin dch chng trnh.

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.

Nhng m project l g vy?


Khng phi vy ch, bn qun n ri ?

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-5-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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).

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-6-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nhng ti sao phi to ra nhiu files nh vy? Vy th ti c th to ti a bao


nhiu file cho mi project ?
iu ty thuc vo bn.
Bnh thng, ngi ta thng hay sp xp nhng function c cng ch vo chung vi nhau.
Trong hnh v trn, trong file editor.c ti tp hp nhng functions lin quan n vic thay i cp
ca tr chi, trong file game.c, ti tp hp nhng functions lin quan n tr chi,...

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:

C file editor.c (cha C code ca cc functions) v file editor.h (cha prototype cc


functions )
Tng t nh vy ta c cc file game.c v file game.h
...

Lm th no my tnh c th bit c cc prototypes nm mt file khc ngoi


file .c ?
Ta thm file .h vo chng trnh nh vo mt ch th tin x l (preprocessor directive).
Tp trung nh, bn cn chun b tinh thn hiu bit thm kh nhiu th y !
Lm sao thm vo mt file header ?...
Bn bit cch m, bn lm rt nhiu ln ri nh khng?

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-7-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Chng ta hy xem v d on u ca file jeu.c ti vit:

C code:
#include <stdio.h>
#include <stdlib.h>
#include "game.h"
void play (SDL_Surface* screen)
{
//....

V by gi bn bit cch thm vo l s dng cc ch th tin x l (preprocessor directive)


#include.
By gi, ch nhng dng u tin ca on code trn:
C code:
#include <stdio.h>
#include <stdlib.h>
#include "game.h" // them vao file game.h
Ti thm vo 3 files .h: stdio, stdlib v game.
C mt s khc bit y: Nhng file m bn chung trong folder project phi c vit
trong ngoc kp "..." ("game.h") v nhng file th vin ( c ci t trc, bnh thng nm
trong folder IDE ca bn) phi c vit trong ngoc nhn <...> (<stdio.h>).
Tm li, thng thng ta s dng:

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)

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-8-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Lnh #include yu cu thm vo ni dung ca file .h vo file .c. Ging nh bn yu cu "Hy


thm vo y ni dung ca file game.h"
Vy ni dung ca file game.h l g?
Chng ta s tm thy trong nhng prototype ca cc functions nm trong file game.c !
C code:
/*
game.h
----Noi dung : prototypes of functions in game.
*/
void play (SDL_Surface* screen);
void placingPlay (int card[ ][NB_BLOCK_HEIGHT], SDL_Rect *post, int direction);
void placingFund (int *firstCase, int *secondCase);

V l cch mt project tht s hot ng !

Vy li ch ca vic t cc prototypes vo file .h l g ?


L do cng kh n gin.
Khi code source bn vit yu cu gi mt function, my tnh ca bn bt buc phi bit trc
function l g, n cn bao nhiu tham s (parameter),... V th ta cn n prototype: ging nh
mt bng hng dn s dng trc khi dng function cho my tnh.
Cu hi trn tng ng vi cu hi v th t chy chng trnh: nu bn t cc prototypes trong
nhng file .h (headers) #include phn u nhng file .c , my tnh ca bn s hiu c cch s
dng tt c cc function k t giai on bt u chy chng trnh.
V iu gip bn t bn tm hn v th t t cc function trong cc files .c. Hin gi, bn ch
vit mt s chng trnh cha khong hai hoc ba functions, bn vn cha thy r ch li ca
nhng prototypes nhng v sau, khi bn c th vit nhiu functions hn ri, nu bn khng
t cc prototypes trong nhng file .h, bn s thng xuyn gp li trong vic dch chng trnh.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

-9-

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nu bn gi mt function (c vit trong file functions.c) t file main.c th bn


cn phi thm cc prototypes ca functions.c trong file main.c. Bng cch to mt
#include "functions.h" u main.c
Bn cn nh: c mi ln bn gi mt function X trong mt file, bn cn phi thm
cc prototypes ca function ny vo file . iu ny s gip trnh bin dch kim
tra li xem bn c gi ng cch hay khng.

Vy lm cch no ti c th thm vo project nhng file .h v .c ?


iu ny ph thuc vo IDE bn s dng nhng v tng qut th qui trnh ny tng t nhau:
File/New/ Empty file
Vic ny s to mt file trng. File ny vn cha c dng .h hay .c, v th bn cn lu li
thng bo iu . C lu li (mc d l mt file trng !).
My tnh s hi bn tn ca file mun lu li l g v lc ny bn c th la chn gia .h v .c :
Nu bn t tn l [tnfile].c th n c dng .c
Nu bn t tn l [tnfile].h th n c dng .h
n gin l nh vy
Lu li file trong folder cha nhng files khc dng cho project (folder cha file main.c).
Thng thng, tt c nhng file .h v .c s c lu li trong cng mt folder.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 10 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

File bn va to c lu li nhng n vn cha c thm vo project !


thm mt file vo project, nhn chut phi vo ct bn tri ca IDE (ni bn tm thy danh
sch nhng file dng cho project) v chn Add files (Xem hnh di).

Mt ca s hin ra v yu cu bn cn thm vo project nhng files no. Chn file bn va to.


V by gi file ny nm trong project v xut hin trong danh sch bn tri.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 11 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cch thm vo nhng th vin chun (standard library)


Bn tng kh thc mc vn ny ng khng ?
Nu nh ta thm vo nhng file stdio.h v stdlib.h, vy th nhng file ny nm u v chng
ta c th tm thy chng phi khng?
Chnh xc l vy !
Thng thng n c ci t chung vi IDE ca bn. IDE ti s dng l Code::Blocks,
nhng files nm y:
C:\Program Files\CodeBlocks\MinGW\include
V bnh thng chng nm trong folder include.
V cng trong folder bn s tm thy kh nhiu files khc. Chng l nhng headers (.h) ca
cc th vin chun (standard libraries), nhng th vin ny u c vit sn (trong
Windows, Mac, Linux...), v ti y bn cng tm thy file stdio.h v stdlib.h. M chng ra m
xem nu bn mun nhng c th bn s thy hi chong y, chng rt phc tp, c qu nhiu
th bn vn cha bit. Nu bn ch , th chng cha y nhng prototypes ca cc functions
standard, ly v d nh printf.

Ok, by gi ti bit cch tm thy nhng prototypes ca cc functions


standard. Nhng lm cch no ti c th xem nhng function vit nh th
no? Nhng file .c ny nm u ?
Bn khng th c c chng u v chng c dch v cha trong folder lib (vit tt ca
library c ngha l th vin). Trong my tnh ca ti, chng nm trong folder:
C:\Program Files\CodeBlocks\MinGW\lib
Nhng file th vin c dch c ui l .a nu s dng Code::Blocks (c bin dch bi
compiler mingw) v c ui l .lib nu dng Visual C++(dch bi compiler Visual). ng c
gng m ra c chng, v chng khng dnh cho ngi bnh thng nh chng ta.
Tm tt li, trong nhng file .c, bn cn phi thm nhng file .h ca cc th vin chun c th
dng nhng function standard nh printf. V nh my tnh ca bn c c bn hng dn s
dng trc khi dng v c th kim tra xem bn c gi function ng cch hay khng, v d bn
qun mt vi parameters dng cho function X.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 12 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Phn tch qu trnh Compilation (separate compilation)


Bn bit mt project c cu thnh bi nhiu files source, chng ta s tm hiu su hn v
cch hot ng ca qu trnh bin dch (compilation).

Cc bn c xem qua trc y mt biu kh n gin v compilation, hiu chi tit


hn cc bn xem hnh v pha di, biu mi ny cc bn nn hiu r v phi hc thuc lng
y !

Hnh v minh ha qu trnh Compilation

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 13 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Ti s phn tch biu trn cho bn hiu r

Tin x l (preprocessor): l mt chng trnh khi ng trc khi compilation.


Nhim v ca n l thc hin nhng instructions c bit m chng ta a vo trong
nhng ch th tin x l, l nhng dng bt u bng du #.
Trong thi im hin ti, nhng ch th tin x l duy nht m bn bit l #include, cho
php thm file khc vo file hin ti. Nhng chng trnh tin x l cn lm c nhiu
iu khc m ta hc nhng bi sau nhng #include vn l ci quan trng nht cn bit.
Chng trnh tin x l s thay th nhng dng #include bng nhng file ch nh. N s
t ni dung ca nhng file .h ta yu cu vo file .c ang dng. V ngay lc ny, nhng
file .c c hon chnh, n cha tt c nhng prototypes ca cc functions bn dng ( file
.c ca bn lc ny n s to hn bnh thng).

Compilation: Giai on ny rt quan trng, n s bin i ni dung trong file source ca


bn thnh code nh phn m my tnh c th hiu c. Trnh bin dch (Compiler) s ln
lt dch tt c cc file .c, quan trng l nhng file ny c thm vo project ca bn
(n phi xut hin trong ct danh sch bn tri IDE m ti gii thiu trn).
Compiler s to ra nhng file .o (hoc .obj, iu ny ph thuc vo loi compiler) ty theo
tng file .c. y l cc files nh phn tn ti tm thi, v thng thng chng s b xa i
cui qu trnh bin dch, bn c th ty chnh li IDE lu li chng. Li ch ca vic lu
li l, ly v d bn mun dch li 1 trong 10 files .c c trong project th bn ch cn dch
li mi file . Nhng file khc c nhng file .o c dch t trc.

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).

Bn bit chng hot ng nh th no ri !


Ti vn xin nhc li, biu ny rt quan trng. N to nn s khc bit gia mt ngi lp
trnh chuyn chp li code m khng hiu ni dung vi mt ngi lp trnh hiu v bit h ang
lm g.
Phn ln li xy ra trong qu trnh compilation, nhng i khi c nhng nhng li xy ra giai
on linker. Ngha l linker khng tng hp c nhng file .o

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 14 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hnh v trn vn cn thiu i cht, nhng file th vin u ? iu g s xy ra


nu nh ta c thm nhng th vin ?
Trong trng hp ny, giai on u biu khng thay i, nhng giai on linker th my
tnh phi lm vic nhiu hn mt t. N phi tng hp li cc file. (tm thi) vi cc th vin m
chng ta cn (.a .ou .lib ty theo compiler).
Xem hnh sau:

V y l biu hon chnh

Nhng file .o v . a (hoc .lib) c tng hp li thnh file excutable.


V l cch m chng ta c c mt chng trnh hon chnh 100%, cha tt c nhng
instructions cn thit cho my tnh, k c cc instruction yu cu hin th mt tin nhn ra mn
hnh, v d nh printf, cha trong file .a cng c tng hp vo trong file executable.
Trong chng 3, cc bn s c hc cch s dng nhng th vin ha (Graphics library).N
cng c ui .a v cha nhng instruction yu cu my tnh hin th mt ca s chng hn.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 15 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Phm vi s dng (scope) ca functions v bin s


Trc khi kt thc bi hng dn, chng ta s tm hiu khi nim v phm vi s dng ca
functions v bin s. Chng ta s xem khi no nhng bin s v function c th s dng, c
ngha l chng ta c th gi c chng.
Cc bin s ring ca functions
Khi bn khai bo mt bin s trong mt function, n s b xa khi function kt thc:
C code:
int triple (int soHang)
{
int ketqua= 0; // Bin s ketqua c lu li trong b nh
ketqua= 3 * soHang;
return ketqua;
} // Function kt thc, bin s ketqua b xa khi b nh
Mt bin s c khai bo trong function ch tn ti khi function ang c s dng. iu
ny c ngha nh th no? Chng ta khng th dng n cho mt function khc!
C code:
int triple (int soHang);
int main (int argc, char *argv[ ])
{
printf ("triple cua 15 la %d\n", triple (15));
printf ("triple cua 15 la %d\n", ketqua); // Error - Loi
return 0;
}
int triple (int soHang)
{
int ketqua= 0;
ketqua = 3 * soHang;
return ketqua;
}

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).

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 16 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cc global variables (Bin ton cc): cn trnh s dng


Global variable c th c s dng trong tt c cc files
Chng ta c th khai bo nhng bin s dng chung cho tt c cc functions cha trong tt c cc
file ca project. Ti s ch cho cc bn cch to ra n, nhng cn trnh s dng. Vic s dng n
c th gip bn n gin ha code source lc ban u nhng v sau khi bn c mt s lng ln
cc bin s, n s d dng khin bn nhm ln v gy ra li khng ng c.
c th khai bo mt bin s global s dng chung cho tt c, chng ta ch cn khai bo
ngoi nhng functions. Bn khai bo chng on u ca file, sau nhng dng #include.
C code:
#include <stdio.h>
#include <stdlib.h>
int ketqua = 0; // khai bo mt bin s global
void triple (int soHang); //prototype cua function
int main (int argc, char *argv[ ])
{
triple (15); // ta goi function triple, no se thay doi gia tri cua bien so ketqua
printf ("triple cua 15 la %d\n", ketqua); // Hien thi gia tri cua ketqua
return 0;
}
void triple (int soHang)
{
ketqua = 3 * soHang;
}
Trong v d ny, function triple khng tr v gi tr no (void). Function triple thay i gi tr
bin s global ketqua v function main c th lu li gi tr .
Bin s ketqua c th s c s dng cho tt c cc file trong project, n c th c gi li
trong TT C cc functions c trong chng trnh.
Dng bin s ny cn trnh s dng. Cch tt nht l s dng return mi khi mun function tr
v mt gi tr.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 17 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Global variable s dng ring cho mt file


Bin s global m chng ta va thy s dng c cho tt c cc file trong project.
Chng ta c th to ra nhng bin s dng ring cho file cha n. Bin s ny c th c s
dng cho cc functions xut hin trong file , khng dng c chung cho tt c cc functions
c trong chng trnh.
to mt bin s nh vy, ta ch n gin thm vo t kha static pha trc:
C code:
static int ketqua = 0;

Static Variable trong mt function


Ch : c i cht kh hiu y. Trong mt function, nu bn thm t kha static trc dng
khai bo bin s, bin s s khng b xa i khi function kt thc, gi tr ca bin s vn
c gi li. V ln gi function sau, bin s s gi li gi tr . C s khc bit vi nhng
bin s global.
V d:
C code:
int triple (int soHang)
{
static int ketqua = 0; // Bien so ketqua duoc tao ra lan dau khi function duoc goi
ketqua = 3 * soHang;
return ketqua;
} // Bien so ketqua khong bi xoa di khi function ket thuc
Vy iu ny c ngha nh th no ?
Ngi ta c th gi li bin s trong nhng ln sau v bin s ketqua vn gi nguyn gi tr.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 18 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Xem thm v d sau hiu r hn:


C code:
int increase( );
int main (int argc, char *argv[ ])
{
printf ("%d\n", increase ( ));
printf ("%d\n", increase ( ));
printf ("%d\n", increase ( ));
printf ("%d\n", increase ( ));
return 0;
}
int increase ( )
{
static int soHang = 0;
soHang++;
return soHang;
}
Console
1
2
3
4
Khi ta gi function increase, bin s soHang c to ra vi gi tr 0. N c tng ln 1, v khi
function kt thc n khng b xa i.
Khi function ny c gi li ln na, dng khai bo bin s b b qua. My tnh s s dng tip
tc vi bin s soHang c to ra trc .
Gi tr bin s soHang trc l 1, by gi thnh 2, ri thnh 3, thnh 4...

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 19 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cc local functions dng ring cho mt file


kt thc phn ny, ti s ch bn v phm vi s dng ca cc functions.
Bnh thng, khi bn to mt function, n s c dng chung cho ton b chng trnh. Ngha
l n cng c th c s dng cho bt k file .c no khc.
Nhng nu bn cn to mt function ch dng ring cho mi file cha n. Bn ch cn thm vo
t kha static trc function :
C code:
static int triple (int soHang)
{
//instructions
}
Hy ngh n vic cp nht prototype cho function ny nh.
C code:
static int triple (int soHang);
By gi, function static triple ch c th gi bi mt function khc nm chung trong file cha n.
Nu bn th gi function triple bi mt function khc cha trong file khc, s khng hot ng.
Tm tt li nhng phm vi s dng c th c ca cc bin s:

Mt bin s khai bo trong mt function s b xa i khi function kt thc, n ch c


s dng ring cho function ny.

Mt bin s khai bo trong mt function vi t kha static pha trc s khng b xa


khi function kt thc, n s lu li gi tr v cp nht dc theo chng trnh.

Mt bin s khai bo bn ngoi cc functions l mt bin s global, c th s dng cho


tt c cc functions ca tt c cc file source c trong project.

Mt bin s global vi t kha static pha trc l bin s global ch c s dng


ring cho file cha n, khng dng c bi cc function vit cc file khc.

Tng t, y l cc phm vi s dng c th c ca cc function:

Mt function mc nh c th s dng chung cho tt c cc files trong project, n c


th gi ra t bt c v tr no trong cc file khc.

Nu ta mun mt function dng ring cho mi file cha n, bt buc phi thm vo t
kha static pha trc.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 20 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Gi s ti mun vit mt function, trong parameter ti s cho n mt gi tr tnh bng pht, ti


mun n chuyn thnh gi v pht tng ng:
1. Nu ta a vo gi tr 45, function s tr v 0 gi v 45 pht.
2. Nu ta a vo gi tr 60, function s tr v 1 gi v 0 pht.
3. Nu ta a vo gi tr 60, function s tr v 1 gi v 30 pht .

Nhn c v kh n gin, nhng hy cng test on code sau:


C code:
#include <stdio.h>
#include <stdlib.h>
/* Toi dat cac prototypes tren cung. Vi day la mot chuong trnh kha nho nen toi khong
dat chung trong mot file.h, nhung trong mot chuong trinh that su, toi se dat chung trong
mot file.h nhu da huong dan o bai truoc*/
void chuyenDoi(int gio, int phut);
int main (int argc, char *argv[ ])
{
int gio = 0, phut = 90;
/*Chung ta co bien so "phut" gi tr 90. Sau khi ket thuc function, toi muon bien so
"gio" nhan gia tri 1 v bien so "phut" nhan gia tri 30 */
chuyenDoi(gio, phut);
printf ("%d gio va %d phut", gio, phut);
return 0;
}
void chuyenDoi(int gio, int phut)
{
gio= phut/ 60; // 90 / 60 = 1
phut= phut% 60; // 90 % 60 = 30
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 22 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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!

Cn ghi thm y, function to ra mt bn sao cho bin s ta gi vo n, nn


bn khng cn phi gi tn bin s chnh xc ging nh cch bn gi main.
r rng hn, bn xem on code sau:
void chuyenDoi (int g, int p)
(g thay cho gio v p thay cho pht)

V tip theo, hy th tm nhiu cch khc sa i chng trnh trn, nh tr v mt gi tr sau


khi kt thc function (s dng return v thay i type function thnh int), bn ch nhn c mt
trong hai gi tr bn cn. Bn khng th no nhn c cng lc hai gi tr. V bn tuyt i
khng c s dng bin s global, l do ti gii thch bi trc.
V l vn kh khn t ra

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

, vy con tr s gii quyt vn trn nh th no?

- 23 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

Cch sp xp trong b nh (RAM)

l cch trnh by mt RAM trong my tnh ca bn.


Hy c k tng dng trong biu . Dng u tin tng ng vi "" u tin ca b nh
(RAM). Mi tng ng vi mt s, l a ch ca n (address)! B nh cha mt s lng ln
a ch, bt u t a ch 0 n mt s no (mt s v cng ln, s lng a ch ph thuc
vo dung lng b nh c lp t trong tng my tnh).
Mi a ch c th cha mt s. Mt v ch mt. Ta khng th no cha 2 s trong cng mt a
ch.
B nh ca bn to ra ch cha nhng con s. N khng th cha ch ci cng nh on vn.
gii quyt vn ny, ngi ta to ra nhng bng m cha trong s v ch ci tng ng.
V d "S 89 tng ng vi ch ci Y". Vn ny s c gii thch r hn bi hc sau. By
gi, chng ta ch tp trung vo cch hot ng ca b nh.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 24 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 25 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

tuoi: tng trng cho gi tr ca bin s.


&tuoi: tng trng cho a ch ca bin s.

Vi tuoi, my tnh s c v gi li gi tr ca bin s.


Vi &tuoi, my tnh s ni vi chng ta a ch no s tm thy bin s.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 26 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cch s dng pointers (con tr)


n by gi, bn ch c th to bin s cha cc s hng. V sau y chng ta s hc cch to
ra nhng bin s cha a ch ca chng, nhng bin s ny gi l con tr.

Nhng... a ch cng l mt s ng khng? Nh vy s ny cn phi cha


trong mt bin s khc v c nh th n s lp li mi sao?
Chnh xc. Nhng cc con s ny s c mt k hiu c bit nhn bit: a ch ca mt bin s
khc trong b nh.
Cch to mt con tr
to mt bin s dng con tr, ta cn phi thm k t * trc tn ca bin s.
C code:
int *pointer;

Bn cn bit rng chng ta cng c th vit:


int* pointer;
vn hot ng tng t nh trn. Nhng cch vit u c khuyn khch hn. Bi v
trong trng hp bn cn khai bo cng lc nhiu con tr trong cng mt dng, bn bt
buc phi t * trc mi tn con tr:
int *pointer1, *pointer2, *pointer3;
Ging nh iu ti dy bn khi khai bo bin s, bn cn cho n gi tr ngay khi khi to, rt
quan trng, bng cch cho n gi tr 0 (ly v d vi bin s). V i vi con tr, iu ny cn
quan trng hn na! khi to con tr, c ngha l cho n mt gi tr mc nh, ngi ta khng
dng gi tr 0 m dng t kha NULL (phi c vit hoa):
C code:
int *pointer = NULL;
Bn khi to mt con tr gi tr NULL. Nh vy, bn chc rng con tr ca bn khng cha
a ch no.
Vic ny din ra nh th no? on m trn s t trc mt ch trong b nh, ging nh cch
bn to ra mt bin s thng thng. Nhng iu thay i y l gi tr ca con tr ch dng
cha a ch ca mt bin s khc.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 27 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Vy th xem vi a ch ca tuoi th sao?


V y l cch ch ra a ch ca mt bin s (tuoi) da trn gi tr ca n (bng cch s dng k
t &), no bt u thi!
C code:
int tuoi = 10;
int *pointerTuoi = &tuoi;
Dng th nht : "To mt bin s type int c gi tr l 10".
Dng th hai : "To mt con tr c gi tr l a ch ca bin s tuoi".
Dng th hai thc hin cng lc hai vic. Nu bn thy phc tp nn khng mun gp hai vic
vi nhau, ti s tch bit chng bng cch chia thnh hai giai on, xem on code sau :
C code:
int tuoi = 10;
int *pointerTuoi; // 1) co nghia la "Toi tao mot con tro poiterTuoi"
pointerTuoi = &tuoi; // 2) co nghia la "con tro pointerTuoi chua dia chi cua bien so tuoi"
Bn cn nh rng khng c type "pointer" nh type int hay double. Ngi ta khng ghi nh sau:
pointer pointerTuoi;
Thay v vy, chng ta s s dng k t *, sau int. Ti sao li nh vy? Tht ra, chng ta cn phi
ch r type ca bin s m con tr s cha a ch ca n.
trn, pointerTuoi s cha a ch ca bin s tuoi (type l int), vy con tr phi c type int*
Nu bin s tuoi c type l double, ta phi vit double *pointerTuoi.
Gi tr ca con tr pointerTuoi ch ra a ch ca bin s tuoi.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 28 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hnh sau tm tt li nhng g din ra trong b nh:

Trong biu trn, bin s tuoi c t vo a ch 177450 (v bn thy ti gi tr tng


ng l 10), v con tr pointerTuoi c t vo a ch 3 (tt c a ch u c chn ngu
nhin, v cc a ch trong biu cng do ti t vit ra ).
Khi con tr c to ra, h iu hnh s dnh mt trong b nh ging nh cch n to ra vi
bin s tuoi. Khc nhau l gi tr ca pointerTuoi l a ch ca bin s tuoi.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 29 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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++)

Ok, nhng... n dng lm g ?


Hin nhin, n khng gip my tnh bn bin i thnh my lm ra caf. Ch l, ta c mt con tr
pointerTuoi cha a ch ca bin s tuoi. Hy dng printf xem th n cha g trong :
C code:
int tuoi = 10;
int *pointerTuoi = &tuoi;
printf ("%d", pointerTuoi);
Console
177450
uhm, tht s iu ny khng c g ngc nhin lm. Ngi ta yu cu gi tr cha trong
pointerTuoi v l a ch ca bin s tuoi (177450).
Vy lm sao c c gi tr ca bin s m pointerTuoi ch vo?
Chng ta phi t k t * trc tn ca con tr:
C code:
int tuoi = 10;
int *pointerTuoi = &tuoi;
printf ("%d", *pointerTuoi);
Console
10
, bn lm c ri y!
bin s tuoi.

Bng cch t k t * trc tn con tr, ta nhn c gi tr ca

Nu chng ta s dng k t & trc tn ca con tr, chng ta s nhn c a ch tm thy


con tr (trong trng hp ny l 3).

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 30 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Vy ti t c iu g y? Ny gi ti ch thy cc vn cng lc cng


rc ri thm. Ti thy khng cn thit hin th gi tr ca bin s tuoi bng con tr! Trc
y chng ta vn c th hin th gi tr ca bin s m u cn n con tr.
y l mt cu hi chnh ng (m bn bt buc phi t ra cho bn thn). Sau tt c nhng iu
rc ri bn va c hc, hin nhin l bn mun bit tc dng ca n, nhng ti thi im ny,
ti kh c th gii thch ht, qua cc bi hc sau, tng cht mt, cc bn s thy n khng n
gin c to ra ch lm mi th phc tp thm.
Xin bn hy b qua mt bn ci cm gic kh chu ti to ra cho bn ("Tt c mi th trn ch
lm nhng vic ny thi sao?" ).
Nu bn hiu c nguyn l hot ng, th chc chn, nhng thc mc s c sng t trong
cc bi hc sau.

Nhng iu cn nm vng
y l nhng iu m bn cn hiu v nm vng trc khi tip tc bi hc:

i vi mt bin s, ly v d bin s tuoi:


o
o

tuoi c ngha l: "Ti mun gi tr ca bin s tuoi",


&tuoi c ngha l: "Ti mun a ch tm thy bin s tuoi";

i vi mt con tr, ly v d con tr pointerTuoi:


o
o

pointerTuoi c ngha l: "Ti mun gi tr ca con tr pointerTuoi" (gi tr ny l


a ch ca mt bin),
*pointerTuoi c ngha l: "Ti mun gi tr ca bin s m con tr pointerTuoi
ch vo".

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 31 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

Ch khng nhm ln cc ngha ca k t * Khi bn khai bo mt con tr, * c


tc dng ch ra bn mun to ra mt con tr:
int *pointerTuoi;
Cn trong printf:
printf ("%d",*pointerTuoi);
iu ny khng phi "ti mun to mt con tr" m l "ti mun gi tr ca bin s
m con tr ch vo".
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 32 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Cch s dng con tr trong mt function


iu kh th v con tr l chng ta c th s dng chng trong cc function c th thay i
trc tip gi tr ca bin s trong b nh ch khng phi mt bn sao nh bn thy on u
bi hc.
Vy n hot ng nh th no? C rt nhiu cch thc s dng. y l v d u tin:
C code:
void triplePointer(int *pointerSoHang);
int main (int argc, char *argv[ ])
{
int soHang = 5;
triplePointer(&soHang); // Ta gui dia chi cua soHang vao function
printf ("%d", soHang); /* Ta hien thi bien so soHang. Va function da truc tiep thay doi gia tri
cua bien so vi no biet dia chi cua bien so nay */
return 0;
}
void triplePointer(int *pointerSoHang)
{
*pointerSoHang *= 3; // Ta x3 gia tri cua so hang duoc dua vao
}

Console
15
Function triplePointer nhn vo parameter gi tr type int * ( l mt con tr ch vo mt bin
s type int).

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 33 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

V y l nhng g din ra theo th t, bt u bi function main:


1. Mt bin s soHang c to ra trong main. Khi to vi gi tr 5.
2. Ta gi function triplePointer. Ta gi vo parameter a ch ca bin s.
3. Function triplePointer nhn a ch l gi tr ca pointerSoHang. V trong funtion
triplePointer, ta c mt con tr pointerSoHang cha a ch ca bin s soHang
4. lc ny, ta c mt con tr ch ln bin s soHang, ta c th thay i trc tip gi tr
ca bin s soHang trong b nh! Ch cn dng *pointerSoHang iu chnh gi tr ca
bin s soHang! v d trn, ngi ta ch n gin thc hin: nhn 3 ln gi tr ca bin
s soHang.
5. kt thc bng return trong function main, lc ny soHang c gi tr 15 v function
triplePointer trc tip thay i gi tr ca n.
Tt nhin, ti c th thc hin return tr v gi tr nh cch chng ta hc trong bi hc v
function. Nhng iu th v y l, bng cch s dng con tr, chng ta c th thay i gi tr
ca nhiu bin s trong b nh (c ngha l "chng ta c th tr v nhiu gi tr"). Khng cn
gii hn mt gi tr duy nht c tr v na !

Vy return cn gi tr s dng g khi ngi ta c th dng con tr thay i


gi tr ?
iu ny ph thuc vo bn v chng trnh bn vit. Chng ta cn hiu l cch dng return
tr v gi tr l mt cch vit kh p v c s dng thng xuyn trong C.
V thng xuyn nht, ngi ta dng return thng bo li ca chng trnh: v d, function
tr v 1 (true) nu tt c din ra bnh thng, v 0 (false) nu c li trong chng trnh.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 34 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Mt cch khc s dng con tr trong function


Trong nhng code source m chng ta va thy, khng c con tr trong function main. Duy nht
ch bin s soHang.
Con tr duy nht c s dng nm trong function triplePointer (c type int *)
Bn cn bit rng c cch vit khc cho on code va ri bng cch thm vo con tr trong
function main:
C code:
void triplePointer(int *pointerSoHang);
int main (int argc, char *argv[ ])
{
int soHang = 5;
int *pointer = &soHang; // con tro nhan dia chi cua bien so soHang
triplePointer (pointer); // Ta dua con tro (dia chi cua soHang) vao function
printf ("%d", *pointer); // Ta hien thi gia tri cua soHang voi *pointer
return 0;
}
void triplePointer(int *pointerSoHang)
{
*pointerSoHang *= 3; // Ta x3 gia tri cua soHang
}

Hy so snh on code source ny vi on code source trc . C mt s thay i nhng


chng s cho ta cng mt kt qu:
Console
15
iu cn xt n l cch a a ch ca bin s soHang vo function, cch s dng a ch ca
bin s soHang. iu khc bit xy ra y l cch to con tr trong function main.
VD trong printf, ti mun hin th gi tr ca bin s soHang bng cch vit *pointer. Bn cn
bit rng ti vn th vit soHang: kt qu s ging nhau v*pointer v soHang u c chung mt
gi tr trong b nh

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 35 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

V nh chng ta bit, chng ta c th lm nh sau:


C code:
int soHang = 0;
int *pointer = &soHang;
scanf ("%d", pointer);

Ch l ta khng t k t & trc pointer trong function scanf Ti y, pointer bn thn n


l a ch ca bin s soHang, khng cn thit phi thm & vo na !
Nu bn lm iu , bn s a cho scanf a ch ca pointer: nhng th chng ta cn l a
ch ca soHang.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 36 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Gii quyt vn nan gii u bi?


n lc chng ta xem li tm im ca bi hc. Nu bn hiu bi hc ny, bn c th t
gii quyt vn t ra. Hy th i! trc khi xem kt qu ti a bn:
C code:
#include <stdio.h>
#include <stdlib.h>
void chuyenDoi(int *pointerGio, int *pointerPhut);
int main (int argc, char *argv[ ])
{
int gio = 0, phut = 90;
// Ta dua vao dia chi cua gio va phut
chuyenDoi(&gio, &phut);
// Luc nay, gia tri cua chung da duoc thay doi !
printf ("%d gio va %d phut", gio, phut);
return 0;
}
void chuyenDoi(int *pointerGio, int *pointerPhut)
{
/*Note: dung quen dat dau * o phia truoc ten cua con tro! Bang cach nay ban co the thay doi
gia tri cua bien so chu khong phai dia chi ca no! Han la ban khong muon chia dia chi cua no
dung khong? */
*pointerGio = *pointerPhut / 60;
*pointerPhut = *pointerPhut % 60;
}

Console:
1 gio va 30 phut

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 37 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Cc bn cn lu l chng ta vn c th gii quyt "vn " ny khng qua cch


s dng con tr. iu ny l chc chn nhng iu s ph v lut chng ta t ra:
khng s dng nhng bin s global. Hoc s dng printf trong function chuyenDoi
(nhng ta cn mt printf trong function main).
Mc ch chnh ca chng trnh l gip bn c c hng th vi vic s dng con tr.
V bn hy c gng thc y nhng hng th ny ngy mt nhiu hn trong cc bi hc
tip theo.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 38 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Bi hc c bt u bng vi li gii thch v cch hot ng ca cc arrays trong b nh. Ti


nhn thy vic m u vi cc kin thc trong phn b nh v cng quan trng: N gip bn
hiu c phng thc hot ng. Mt lp trnh vin hiu c iu h lm, iu ny s m
bo chng trnh vit ra chy n nh hn, bn ngh sao?

Cc arrays trong b nh
Arrays l mt dy cc bin s cng type, cha trong mt vng b nh lin tc.

Li gii thch trn c v ging trong t in phi khng?

R rng hn, mng c th cha mt s lng ln bin s cng type (long, int, char, double...).

Mi mng c mt kch thc xc nh. N c th to bi 2, 3, 10, 150, 2500 cases (, slots), ty


theo ty chn ca bn.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 39 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Biu sau l mt mng kch thc 4 trong b nh, n bt u t a ch 1600 :

Khi bn yu cu to mt mng kch thc 4 trong b nh, chng trnh s yu cu h iu


hnh quyn s dng 4 b nh. 4 ny phi nm k nhau, c ngha l sau s k tip trc.
Ging nh trn, cc a ch nm ni tip nhau: 1600, 1601, 1602, 1603 v khng c "khong
trng" no gia.
Cui cng, mi trong mng cha mt s cng type. Nu mng c type int, th mi trong
mng cha mt s type int. Khng th to mng cng lc cha gi tr type int v double.
Tm li, sau y l nhng iu buc phi ghi nh:

Khi mt mng (array) c to ra, n s dng mt vng lin tc trong b nh: cc


b nh s nm lin tc k nhau.
Tt c cc (case) trong mng phi cng type. Mt array type int ch cha cc s dng
int, khng th cha cc s dng khc.

Cch to mt mng (array)


Bt u, chng ta s xem lm th no to mt mng cha 4 gi tr int:
C code:
int array[4] ;
Vy thi, ta ch cn thm vo trong du ngoc vung [ ] s lng m bn mun cha trong
mng. Khng c gii hn (ty theo dung lng b nh ca my tnh).

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 40 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Vy by gi, lm cch no a gi tr vo mi case trong mng? Rt n gin, ch cn vit


array[s_th_t_ca_case]

Ch : mt mng bt u t s 0! Mng cha 4 gi tr int c cc vi s th t 0, 1,


2, v 3. Khng c s 4 trong array 4 cases! Cc bn hay nhm ln y, nh k.
Nu ti mun thm vo mng cc gi tr ging nh trong biu trn, ti s vit:
C code:
int array[4] ;
array[0] = 10;
array[1] = 23;
array[2] = 505;
array[3] = 8;

Vy mi quan h gia mng v pointer l g ?


Nu bn ch vit l array th chnh l pointer. l mt pointer ch vo u tin ca mng.
Test :
C code:
int array[4] ;
printf ("%d", array);
Kt qu, ta nhn c a ch u tin ca mng:
Console:
1600
Nu bn ghi th t ca trong mng vo ngoc vung [ ], bn s nhn c gi tr ca :
C code:
int array[4];
printf ("%d", array[0]);
Console:
10

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 41 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Tng t vi cc khc. Nhc li l nu bn vit array, n s l mt pointer, chng ta c th s


dng k t * c c gi tr ca u tin:
C code:
int array[4];
printf ("%d", *array);
Console:
10
V c th nhn gi tr ca tip theo vi *(array+1) (a ch ca array+1). C 2 dng code sau
hot ng tng t nhau:
C code:
array[1] // Cho gia tri cua o thu 2 (o dau tien viet la [0])
*(array+ 1) // Tuong tu: cho gia tri o thu 2
Ni r hn, nu bn vit array[0], cng ging nh bn yu cu gi tr tm thy a ch array + 0
( v d l 1600). Nu bn vit array[1], bn s nhn c gi tr a ch array + 1 (1601 trong
v d). V tng t vi nhng trng hp cn li.

Dynamic array(mng ng)


Ngn ng C tn ti rt nhiu versions. Version trc y, gi l C99, cho php to cc dynamic
array, c ngha l mng vi kch thc c khai bo bi mt bin s:
C code:
int kichThuoc = 5;
int array[kichThuoc];
Cch vit ny khng c thng dng lm i vi cc compiler, nhiu khi chng trnh chy n
dng th 2 s dng li. T u n gi, ti hng dn bn ngn ng C89 nn chng ta s tuyt
i khng dng dng code th 2
Vy l, cc bn khng c vit mt bin s t trong ngoc vung khai bo kch thc mt
mng, k c khi bin s ny l hng s (constant)! Mt mng phi c kch thc xc nh, c
ngha l khi khai bo bn phi ghi r rng kch thc ca mng bng mt con s:
C code:
int array[5] ;

Vy ti sao li cm to mt mng vi kch thc ph thuc vo mt bin s?


Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 42 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Ti bo m vi bn: iu ny l c th thc hin! ngay c trong C89.


Nhng thc hin iu ny, chng ta s dng mt k thut khc (chc chn, m bo c th
chy c trn mi iu kin) gi l phn b ng (dynamic allocation). Chng ta s c hc
v sau.

Lit k cc gi tr trong mng (array)


By gi ti mun hin th gi tr mi trong mng. Ti c th s dng s lng printf bng vi
s trong mng. Nhng ti phi vit nhiu ln printf, iu ny tht nhm chn (hy tng tng
n trng hp mng cha 8000 gi tr)
V vy, tt hn l s dng vng lp. V vng lp for rt tin li trong vic ny:
C code:
int main (int argc, char *argv[ ])
{
int array[4], i = 0;
array[0] = 10;
array[1] = 23;
array[2] = 505;
array[3] = 8;
for (i = 0 ; i < 4 ; i++)
{
printf ("%d\n", array[i]);
}
return 0;
}

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 43 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

tng dn t 0, 1, 2 ri 3. Nh vy, n s hin th cc gi tr ca array[0], array[1], array[2] v


array[3]!
Cn ch l khng nn hin th gi tr ca array[4]! Mt array 4 ch c s th t l
0, 1, 2, 3. Nu bn th hin th gi tr ca array[4], n s hin th mt s khng xc nh,
y s l mt li kh p. H iu hnh s dng chng trnh li do n c xm nhp vo
mt a ch khng cho php.

Khi to cc gi tr trong mt mng


Bn bit cch di chuyn trong mng, iu ny c ngha bn c th khi to mng vi gi tr 0
tt c cc bng vic s dng vng lp!
Bn t c trnh cn thit c th thc hin iu ny

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 44 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Mt cch khc khi to gi tr


Bn cn bit l cn mt cch khc khi to gi tr trong mng kh th cng trong C.
Bng cch vit tng gi tr trong ngoc nhn { }, cch nhau bi du phy , :
array[4] = { giaTri1, giaTri2, giaTri3, giaTri4};
C code:
int main (int argc, char *argv[ ])
{
int array[4] = {0, 0, 0, 0}, i = 0;
for (i = 0 ; i < 4 ; i++)
{
printf ("%d\n", array[i]);
}
return 0;
}
Console:
0
0
0
0
Mt khc, li ch ca cch lm ny l, bn ch cn khai bo gi tr nhng u tin, nhng cn
li s t ng nhn gi tr 0:
C th, nu ti vit:
C code:
int array[4] = {10, 23}; // Gia tri nhap vao: 10, 23, 0, 0
u tin nhn gi tr 10, th 2 nhn gi tr 23, cc cn li nhn gi tr 0.
Vy lm cch no khai bo tt c cc vi gi tr 0? Bn ch cn khai bo u tin gi tr 0,
sau cc cn li cng s nhn gi tr 0.
C code:
int array[4] = {0} // Khai bao array voi tat ca cac o gia tri 0.
K thut ny c th hot ng vi bt k kch thc no (c th thc hin trn array 100 v hn
na)
Ch , thng gp li
int array[4] = {1};
Dng code ny s thm vo cc gi tr sau: 1, 0, 0, 0. Nhiu bn ngh rng dng code trn
s khi to mng vi tt cc gi tr l 1, nhng khng phi vy, lm iu ny cc bn
cn s dng vng lp.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 45 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

To mt function lit k cc gi tr trong mng


Bn bit cch hin th ni dung ca mt mng.
Vy ti sao bn khng th vit mt chng trnh thc hin iu ny? Nh th bn c th tm
hiu cch a mt array vo function.
Chng ta s cn gi hai parameter vo function: u tin l array (a ch ca array) v th hai s
l kch thc ca n! V function ca bn c kh nng hot ng vi bt k array no khc a
vo. Chng ta s cn mt bin s kichThuocArray.
Bn bit rng array c th xem nh l mt pointer. V vy, chng ta s a array vo function
ging nh thc hin vi pointer:
C code:
// Prototype cua function hien thi
void hienThi (int *array, int kichThuocArray);
int main (int argc, char *argv[ ])
{
int array[4] = {10, 15, 3};
// Chung ta hien thi noi dung cua array
hienThi (array, 4);
return 0;
}
void hienThi (int *array, int kichThuocArray)
{
int i;
for (i = 0 ; i < kichThuocArray ; i++)
{
printf ("%d\n", array[i]);
}
}
Console
10
15
3
0

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 46 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Function ny khng khc nhiu so vi function chng ta c hc bi trc. Chng ta s a


vo mt parameter pointer type int (array), sau l kch thc ca array (rt quan trng bit
khi no vng lp dng li!). Ni dung ca array s c hin th qua function nh vo mt vng
lp.
Cn ghi thm l cn mt cch khc a mng vo function:
C code:
void hienThi (int array[ ], int kichThuocArray)
hot ng tng t nh trn, vic s dng nhng du ngoc vung cho php ngi c code hiu
r: function cn mt mng. C th hn ch c nhm ln l function cn mt con tr hoc bin
c bn no .
Ti thng s dng cch vit th hai a mng vo function, cc bn nn thc hin ging ti.
V trong cch vit ny chng ta khng cn khai bo kch thc trong ngoc vung.
Mt vi bi tp thc hnh!
Ti lc no cng c rt nhiu bi tp cho bn luyn tp !
Cc bn nn t vit cc function lm vic vi array.
Ti ch a bi cho cc bn thc hnh, v code, cc bn s t vit ly. Hy t cu hi, nu c
thc mc.
Bi tp 1
To mt function tongArray tnh tng cc gi tr cha trong n (s dng return tr v gi
tr). V gip bn hiu r hn, y l prototype ca function cn vit:
C code:
int tongArray (int array[ ], int kichthuocArray);
Bi tp 2
To mt function trungBinhArray tnh trung bnh cc gi tr cha trong n.
Prototype:
C code:
double trungBinhArray (int array[ ], int kichThuocArray);
Bi tp 3
To mt function copyArray chp ni dung array ny sang mt array khc.
Prototype:
C code:
void copyArray (int array1[ ], int array2[ ], int kichThuoc);

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 47 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

ng bao gi qun mt array bt u bng s th t 0 (khng phi 1)


Khi bn a mt array vo function, lun gi km theo kch thc ca array.

V ti s cho bn mt tin vui, bn c trnh c th lm vic vi cc chui k t.


Bn c th a mt chui k t vo b nh, v d nh vic yu cu h tn ngi dng.
V trong bi hc sau chng ta s hc cch lm vic vi cc chui k t !

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 48 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 49 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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;
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 50 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nu ti nhp vo y ch ci B, my tnh s hin th:


Console:
B
B
(ch B th nht l do ti nhp t bn phm v ch B th 2 do printf hin th)
V l nhng g bn cn bit v bin kiu char.

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.

String - Chui k t l mt mng cc gi tr char!


Tiu trn ni ra tt c nhng g ti s ni vi bn y.
Mt chui k t (string) ch l mt mng cc gi tr bin kiu char. n gin l mt mng, khng
hn.
Nu ti to mt mng:
C code:
char string[5];

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)

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 51 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

y l biu v cch b nh my tnh lu tr (Bn cn ch k phn ny v phn sau bi hc


s phc tp hn rt nhiu):

Ging nh bn thy, l mt bng cha 5 b nh trnh by ch Hello . c c gi


tr s, ti t chng vo gia nhng du ngoc n, ni vi my tnh rng l mt s ch
khng phi k t. V trong thc t, trong b nh my tnh s lu li gi tr s tng ng vi
nhng ch ci c lu.
Vng, nhng bn cn lu , mt dy k t khng ch cha cc ch ci! Biu trn cha hon
chnh.
Mt dy k t bt buc phi cha mt k t c bit cui cng, gi l k t kt thc chui .
K t c vit l \0.

Ti sao ta cn phi kt thc chui bng mt \0 ?


n gin l v my tnh cn bit khi no kt thc mt chui k t. K t \0 cho php gii thch:
Dng li, khng cn g c tip y na! .
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 52 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Qua , lu t Hello (gm 5 ch ci) vo b nh, ta cn dng mt string 6 char ch khng


phi l mt string 5 char!
Mi khi bn to mt chui k t, bn cn phi ngh n trc v tr d phng t k t \0,
y l iu bt buc!
Li thng gp trong lp trnh ngn ng C l vic bn qun i k t ny, chnh ti cng mc
li ny kh l nhiu ln
hiu r hn, y chnh l biu chnh xc v t Hello cha trong b nh:

Bn thy y, chui k t chim 6 trong b nh ch khng phi 5.


Chui k t s kt thc bng \0, k t kt thc chui cho php my tnh bit rng chui k t s
kt thc y.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 53 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Bn s thy rng k t \0 s l mt li th cho chng ta. Nh n m bn c th bit c di


ca chui k t, v n nm v tr kt thc ca chui. Bn c th a chui k t vo mt
function m khng cn phi thm vo mt bin s ch di ca chui.
Vic ny ch c tc dng i vi nhng chui k t ( c ngha l vi type char*, hoc char[ ]).
i vi nhng dng mng khc, cc bn bt buc phi lu li ln ca chui u .
Khai bo v khi to chui k t
Nu ta mun khai bo mt t Hello , ta c th s dng phng php bun chn sau:
C code:
char string[6]; // mang string gom 6 char de luu tru H-e-l-l-o va \0
string[0] = 'H';
string[1] = 'e';
string[2] = 'l';
string[3] = 'l';
string[4] = 'o';
string[5] = '\0';
Phng php ny hot ng, bn c th kim tra li bng cch s dng printf.
Ah, ti qun mt printf: bn cn phi bit thm mt k t c bit khc l %s (s nh l mt
string).
V y l on code hon chnh to v hin th t Hello :
C code:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[ ])
{
char string[6]; // mang string gom 6 char de luu tru H-e-l-l-o v \0
// Khoi tao chuoi ky tu (Ta viet tung ky tu vao bo nho)
string[0] = 'H';
string[1] = 'e';
string[2] = 'l';
string[3] = 'l';
string[4] = 'o';
string[5] = '\0';
// Hien thi chuoi ky tu bang printf nho %s
printf ("%s", string);
return 0;
}
Console:
Hello
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 54 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Tt c nhng dng code trn ch to v hin th mi t Hello . Kh l mt mii khi phi lp


i lp li vic khai bo ring bit tng ch ci trong mng string. khi to mt chui k t,
may mn thay ta cn mt phng php khc n gin hn:
C code:
int main (int argc, char *argv[ ])
{
char string[ ] = "Hello"; // Do dai cua chuoi ky tu duoc may tinh tu dong tinh toan.
printf ("%s", string);
return 0;
}
Console:
Hello
dng u tin trong main, ti to mt bin s dng char[ ]. Ti cng c th vit l char*, kt
qu s vn nh nhau.
Sau bn s in trong ngoc kp t bn mun lu li, b dch ca C s tnh ton t ng
di cn thit. C ngha l n s m s ch ci v thm vo k t \0. Sau n s in tng
ch ci ca t Hello vo b nh ging nh cch u tin chng ta lm trn.
Tm li, n gin v d s dng.
Khuyt im: Cch ny ch hot ng khi khi to chui, bn s khng th s dng tip nhng
phn sau ca chng trnh, bn khng th vit:
C code:
string = "Hello";
Sau phn khi to, bn ch c th lu mt t bng cch vit ring bit tng ch ci vo b nh.

Cch lu tr mt ch ci bng scanf:


Cc bn c th nh ngi s dng nhp vo mt t bng scanf, bng cch s dng tip k t %s.
Vn duy nht xy ra, bn s khng bit c bao nhiu ch ci ngi dng s nhp vo. Nu
bn yu cu nhp tn, c th ngi dng ch nhp vo Nhu (3 ch ci), v i lc ngi s
nhp vo Superman (nhiu ch ci hn).
lm iu ny, 36 k ca tn t l khng cho bn. i khi, chng ta cn khai bo mt mng
char ln hn, ln c th cha tn ca ngi dng. Chng ta s to mt char[100] cha
tn ngi dng. Vic ny khin bn c cm gic chng ta ang lng ph b nh my tnh, nhng
vn v b nh ny khng tht s ng lu tm (s c nhng chng trnh lm lng ph b
nh my tnh hn rt nhiu ln nh th ny, t t bn s thy).
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 55 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Cc thao tc s dng trn chui k t:


Nhng chui k t s c s dng thng xuyn. Tt c nhng cu, nhng t hin th trn mn
hnh my tnh bn thy u c to bi cc array type char trong b nh my tnh, chng hot
ng theo cch ti va hng dn trn.
Ti s gii thiu cho bn mt s thao tc ty chnh nhng chui k t, ngi ta to trong
th vin string.h nhng function cn thit.
Ti s khng hng dn bn tt c trong bi ny, s rt di v c mt s function tht s khng
cn thit.
Ti s hng dn bn nhng ci cn thit dng trong thi im hin ti.
Hy nh khai bo th vin string.h
Mc d iu ny l hin nhin nhng ti mun bn xc nh r: khi bn s phi s dng mt th
vin mi (string.h), bn cn phi khai bo u file .c m bn cn dng n:
#include <string.h>
Nu bn khng lm vic ny, my tnh s khng bit c nhng function m ti sp hng dn
cho bn, v chng trnh khng c c nhng prototypes cn thit, v vic dch chng trnh s
khng hon thnh c.
Tm li, bn ng qun phi khai bo th vin ny mi khi cn dng n nhng function thao
tc trn chui.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 56 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Strlen: tnh di mt chui


Strlen l mt function dng tnh ton di mt chui k t (khng tnh k t \0).
Bn ch cn a vo n parameter: chui k t ca bn! Function ny s tr v di ca n.
By gi bn bit prototype l g v vy ti s a bn prototype ca function ti sp hng
dn. Nhng ngi lp trnh xem prototype ging nh hng dn s dng trc khi dng ca
function (v nhng dng ch thch bn cnh s khng bao gi tha).
Prototype y:
size_t strlen(const char* string);
size_t l mt type c bit, n cho bit function s tr v mt s tng ng vi mt kch
thc no . y khng phi l mt type c bn nh int, long hay char, y l mt type
c ch thm. Chng ta s hc cch to ra nhng type mi nhng bi hc sau.
Trong thi im hin ti, chng ta tm thi hi lng vi gi tr tr v ca strlen c lu li trong
mt bin s type long (my tnh s t ng chuyn size_t thnh long). r rng, chnh xc, bn
cn lu li kt qu trong mt bin s type size_t, nhng thc t th mt bin s type long l .
Function ny c parameter l mt type const char. Const (c ngha l constant, bn nh ch?) c
tc dng ngn khng cho strlen thay i chui k t ca bn. Khi bn thy mt const, bn bit
rng gi tr ca bin s s khng th thay i, ch c th c gi tr ca n.
Test th function strlen:
C code:
int main (int argc, char *argv[ ])
{
char string[ ] = "Xinchao";
long doDaiChuoi = 0;
// gia tri do dai cua chuoi se duoc luu lai trong bien so doDaiChuoi
doDaiChuoi = strlen (string);
// hien thi do dai chuoi
printf ("Chuoi %s co do dai %ld ki tu", string, doDaiChuoi);
return 0;
}
Console:
Chuoi Xinchao co do dai 7 ki tu
Function strlen ny c vit d dng bng cch s dng vng lp trn mng kiu char, v n s
dng li khi gp k t kt thc chui \0. N s ln lt truy cp vo cc c cha tng k t
ca chui, s lt truy cp s tng dn sau mi vng lp, v kt qu s tr v gi tr cui cng
ca nhng lt truy cp ny.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 57 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 58 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Strcpy: sao chp chui ny vo chui khc


Function strcpy(c th hiu l string copy ) cho php sao chp mt chui k t ny t vo
trong mt chui k t khc.
Prototype ca n l:
char* strcpy(char* copyString, const char* stringCopy);
function ny nhn 2 parameter:
copyString: l mt pointer char* (mng char). Chui k t s c chp vo trong mng ny.
stringCopy: l mt pointer ca mt mng char khc. Chui k t ny s c dng chp vo
copyString.
Function tr v pointer ca copyString cng khng hu dng lm. Thc t, ta khng cn s dng
kt qu function ny tr v. Cng test th nh.
C code:
int main (int argc, char *argv[ ])
{
/* Chung ta khai bao bien "string" kieu char trong do co chua 1 chuoi ky tu va mot bien "copy"
voi kich thuoc 100 ky tu de bao dam co du cho trong */
char string[ ] = "Text", copy[100] = {0};
strcpy(copy, string); // Chung ta se sao chep nhung ky tu tu "string" sang "copy"
// Neu khong co gi sai sot thi "copy" bay gio se giong nhu "string"
printf ("string is : %s\n", string);
printf ("copy is : %s\n", copy);
return 0;
}
Console:
string is : Text
copy is : Text
Kt qu ca string l Text . iu l bnh thng.
Nhng, bin s copy cng c kt qu tng t, ban u bin s ny khng c gi tr no, sau
n nhn ni dung ca string. Vy, string c sao chp li vo trong copy.
Bn cn chc rng ln ca chui copy c nhn ni dung ca string. Nu trong v d
trn, ti khai bo copy[4] (s khng cha k t \0), function strcpy s vt gii hn b
nh, iu ny s lm chng trnh bn dng li. Bn cn trnh iu ny.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 59 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Biu s nh sau:

Mi k t trong string s c in vo copy.


Phn sau ca copy cn nhiu nh khng dng n, v trn, ti khai bo copy c di l 100,
nhng trong v d ny, 5 l s dng. Li ch ca vic to ra mt mng ln hn l c th
s dng cho nhiu trng hp khc nhau, c th c mt s chui c di ln hn trong phn
sau ca chng trnh.

strcat: ghp ni 2 chui


function ny c tc dng thm ni dung mt chui pha sau mt chui khc. Gi l
concatenation. (s xu chui )
Nu ta c:
string1 = "Hello "
string2 = "M0N1M"
Nu ti ni string2 vo string1, string1 s thnh Hello M0N1M . Cn
string2 s khng thay i, string2 vn lun l M0N1M . Ch mi string1 thay i.
l cch strcat hat ng, v y l prototype ca n:
char* strcat(char* string1, const char* string2);
Nh bn thy, string2 khng th thay i v n c nh ngha l mt constant trong prototype
ca function.
Function tr v pointer ca string1, ging nh strcpy, khng c gi tr s dng nhiu nn ta c
th khng cn quan tm n kt qu n tr v.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 60 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Function thm vo string1 ni dung ca string2. Bn c th hiu r hn qua on code sau:


C code:
int main (int argc, char *argv[ ])
{
/* Chung ta se tao ra 2 mang ky tu, nho rang string1 phai du lon de chua
duoc nhung ky tu cua string2. Neu khong chuong trinh se bao loi. */
char string1[100] = "Hello ", string2[ ] = "M0N1M";
strcat (string1, string2); // Nhung ky tu cua string2 se duoc noi tiep vao string1
// Neu moi thu dien ra tot dep thi ket qua string1 se la "Hello M0N1M"
printf ("string1 is : %s\n", string1);
// string2 van khong bi thay doi :
printf ("string2 is always : %s\n", string2);
return 0;
}
Console:
string1 is : Hello M0N1M
string2 is always : M0N1M
Cn chc chn l string1 phi ln cha thm ni dung ca string2, nu khng bn s vt
qua gii hn b nh cho php, iu s khin chng trnh dng li.
V vy ti khai bo string1 vi ln l 100. Trong string2, ti my tnh t tnh ln ca
chui (ti khng cn phi suy ngh nhiu v iu ny) v chui ny khng b thay i. Ta khng
cn thit phi khai bo.
Biu s nh sau:

Mng ca string2 s c thm vo pha sau ca string1 (n s chim thm mt vi b nh)


K t \0 ca chui string1 s b xa i (hay c thay th bng M ca M0N1M). Thc t,
khng th in \0 vo gia chui nu khng n s ct chui ra lm 2 phn! ta ch t \0 vo v
tr cui ca chui, khi chui kt thc.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 61 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Strcmp: so snh di 2 chui


Function Strcmp dng so snh di 2 chui vi nhau.
V y l prototype:
C code:
int strcmp(const char* string1, const char* string2);
Nhng bin s ca string1 v string2 c so snh vi nhau. Nh bn thy, khng c chui no
b thay i v chng c khai bo nh nhng constants.
Kt qu tr v ca function ny cn c gi li.
Thc t, strcmp tr v:

Gi tr 0 nu hai chui ging nhau.


Mt gi tr khc 0 (ln hn hay nh hn 0) nu hai chui khc nhau.

V logic, function tr v 1 nu 2 chui bng nhau ni l TRUE th hp l hn (nhng


boolean). Nhng function ny khng do ti vit ra
Ni r hn, function s so snh gi tr ca tng k t ca mi chui vi nhau. Nu tt c nhng
k t ging nhau, n s tr v 0.
Nu cc k t ca string1 ln hn string2, n s tr v mt s dng. Ngc li, function s tr
v mt s m.
Trong thc tin, ngi ta thng dng strcmp so snh 2 chui nu chng ging nhau.
y l on m test.
C code:
int main (int argc, char *argv[ ])
{
char string1[ ] = "Text for test", string2[ ] = "Text for test";
if (strcmp(string1, string2) == 0) // Neu 2 chuoi giong nhau
{
printf ("Hai chuoi giong nhau!\n");
}
else
{
printf ("Hai chuoi khac nhau!\n");
}
return 0;
}
Console:
Hai chuoi giong nhau!

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 62 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nu hai chui ging nhau, kt qu s tr v 0.


Lu thm l ti c th lu kt qu ca strcmp li bng mt bin s kiu int. Tuy nhin chng ta
khng bt buc phi lm iu ny, bn c th dng trc tip if nh ti lm.
Chng ta s khng ni nhiu hn v function ny. N kh n gin s dng, v iu bn cn
nh l gi tr 0 c ngha l ging nhau v mt gi tr khc 0 c ngha l khc nhau .
y chnh l nguyn nhn li thng xut hin khi s dng function ny.

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:

string: chng ta s tm kim k t trong bin ny.


characterSearch: k t bn mun tm kim trong bin string.

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Thc t, subString cng l mt pointer nh string. Khc bit ch string ch vo ch ci u tin


(T vit hoa), cn subString ch vo ch f u tin c tm thy trong string.
Biu sau ch ra cho bn thy n hot ng nh th no :

String bt u k t u (T vit hoa) cn subString th ch vo k t f

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 :

Function strchr tm kim v ch vo k t u tin n tm thy trong chui.


Fucntion strrchr tm kim v ch vo k t cui cng n tm thy trong chui.

VD: Nu bn mun tm k t r trong chui Program:

Khi dng strchr: hm s ch vo k t r u tin gia k t P v o.


Khi dng strrchr: hm s ch vo k t r cui cng gia k t g v a.

Strpbrk: ch ci u tin trong danh sch.


Function ny c cch hot ng kh ging vi function trc. N s tm mt trong nhng ch ci
trong danh sch bn cho di dng mt dy k t, ngc li vi strchr ch c th tm kim mi
ln duy nht mt k t.
V d, nu danh sch tm kim a vo c dng xfs cho dy k t Text for test , Function
s cho kt qu l mt pointer ch vo ch ci u tin tm c ca mt trong nhng ch ci
trong danh sch. Ni r hn, ch ci u tin trong xfs n tm thy trong Text for test l
x, nn strpbrk s tr v pointer ln x.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 64 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 65 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Strstr: tm kim chui k t trong mt chui k t khc.


Function ny s gip bn tm kim chui k t u tin tm thy trong mt chui k t khc.
Prototype ca n l:
char* strstr(const char* string, const char* stringSearch);
Prototype ca function ny kh ging vi strpbrk, nhng ch ng nhm ln, strpbrk tm
kim mt ch ci trong danh sch, cn strstr tm kim nguyn c dy k t
V d:
C code:
int main (int argc, char *argv[ ])
{
char *subString;
// Chung ta se tim kiem chuoi "test" trong "Text for test" :
subString = strstr("Text for test", "test");
if (subString != NULL)
{
printf ("Chuoi ky tu dau tien ma ban muon tim trong chuoi Text for test la: %s\n", subString);
}
return 0;
}

Chui k t u tin m bn mun tm trong chui Text for test l : test


Function strstr tm kim dy k t test trong Test de test.
V tr li kt qu, ging nh nhng function khc, mt pointer ti v tr n tm thy. Kt qu l
NULL nu n khng tm thy g.
Hy nh kim tra trng hp function tm kim khng tr v kt qu NULL. Nu bn
khng lm iu ny trc, khi bn mun hin th mt dy k t c pointer l NULL,
chng trnh s b li. H iu hnh s dng chng trnh ca bn ngay tc khc v n c
gng xm nhp vo mt a ch NULL m n khng c php.
Trong vd trn, ti hi lng vi kt qu m function ny tr v. Trong thc tin, vic
ny tht s khng cn thit. Bn ch cn vit mt on code if (result != NULL) bit
rng vic tm kim tm c mt th g . Trng hp khng tm thy g, hin th thng
bo Khong tim duoc ket qua can tim.
Tt c u ty theo chng trnh bn vit, nhng trong mi trng hp, nhng function ny l c
bn bn thc hin cc thao tc tm kim lin quan ti vn bn.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 66 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

sprintf: vit trong mt chui


Khc vi cc function trc , function ny c tm thy trong stdio.h.
Tn ca function ny khin bn nh n th g quen thuc.
Function ny kh ging vi function printf m bn c bit, nhng thay v in ra mn hnh,
sprintf s vit vo mt dy k t! Bn c th thy tn ca function ny bt u bng s ca
t string
y l mt function rt tin li to ra mt chui, sau y l mt v d nh:
C code:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[ ])
{
char string[100];
long age = 18;
// Chuong trinh se viet "You are 18 years old !"
sprintf (string, "You are %ld years old !", age);
// Chung ta se in chuoi ky tu nay ra man hinh de dam bao chuong trinh hien thi dung
printf ("%s", string);
return 0;
}
Console:
You are 18 years old !
N c s dng tng t nh printf, ch khc im bn phi thm vo mt parameter ngay v
trc u tin, l mt pointer ch n chui bn cn vit vo.
Trong v d ca ti, ti vit trong chui You are %ld years old !, ti %ld s c thay th
bng gi tr ca bin s age. Tt c cc nguyn tc ca printf u c y, bn c th s dng
%s in vo mt chui k t khc vo y.
Nh thng l, hy kim tra trc vic chui ca bn c ln nhn nhng k t m sprintf
s gi vo.
Nu khng, chuuuuuu. Bm
Phi ni l cc thao tc trn chui k t trong C cn c thi hnh mt cch rt t m.
Bn cn bit rng ti cng khng th bit c tt c nhng function c trong string.h. Ti cng
khng yu cu bn phi hc thuc lng. Nhng bn cn phi bit cch dy k t hot ng vi \0
v nhng iu trn.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 67 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Tng kt !!!

My tnh khng th lm vic vi cc k t, n ch bit n nhng con s. Chng ta c


nhng con s gii quyt vn lin quan n nhng k t trong bng ch ci ca
mnh bng bng m tn l ASCII.
Mi bin kiu char ch c th cha mt v ch mt k t duy nht. Chng thng c
lu li ti mt a ch b nh ngu nhin trn my tnh, my tnh s t ng sp xp v
bin dch nhng bin ny.
c th to ra mt t hoc mt cm t chng ta phi to ra mt chui. Trong trng
hp ny, chng ta s s dng mng k t.
Tt c cc chui u c kt thc bi mt k t c bit, l k t kt thc chui \0
C rt nhiu functions dng x l chui c vit sn trong th vin string.h. V
vy ng qun khai bo th vin ny u chng trnh trc khi bn mun thao tc vi
chui k t nh.
Bn cn nh rng ngn ng C c bc tng i thp, c ngha l cc thao tc ca bn rt gn
vi cch hot ng ca my tnh.
Li ch khc l hin gi bn bit phng thc hot ng ca my tnh trn chui k t. Nhng
kin thc ti dy bn y s pht huy tc dng trong tng lai, ti c th chc m bo vi
bn.
Ngc li, vic lp trnh trn Java hay trn Basic khng cn thit phi hiu cch thc hot ng
ca my tnh, bn hin gi bt u hiu lm th no my tnh hot ng, iu ny theo ti l
rt quan trng.
Nghe c v hay y nhng c mt iu ng ngi l chng ny hi phc tp. Bn phi d on
trc ln ca array, ngh n lu li \0 Cc thao tc trn dy k t khng d dng nm
vng bi ngi mi bt u, phi cn thm mt t thc hnh c th t c.
Ni v phng din thc hnh mt cch chnh xc th ti c cng vic dnh cho bn.
Ti khuyn khch bn c gng thc hnh tht nhiu. Cn iu g tt hn bng cch lm vic trn
nhng chui k t? Nu cha ph, hy cng lc lm vic trn chui k t, mng v pointer
V y l vic ti mun bn lm: Bn va hc mt s functions trong th vin string.h, nhng
bn c kh nng t vit li cc function cho ring mnh.
(?)Nhng c cn thit ko? Nu cc function c vit ri, ti sao phi ph cng vit li?
Tht s th khng cn thit t no, v trong tng lai chc chn bn s s dng cc function trong
string.h ch khng phi nhng function ca ring bn. Nhng vic ny s gip bn luyn tp, ti
thy rng y l mt bi tp kh hay. Ti ch cho bn cch hot ng ca function strlen, iu
c th gip bn thc hin cc function khc.
Nhng, ng c gng vit li nhng function nh sprintf, y l mt function vi phc tp
tng i cao. Hy tm chp nhn vi cc function c trong string.h.
Nu bn b kt u , ng ngi t cu hi trn cc din n.
No, lm vic thi!
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 68 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

S qu trnh bin dch

C mt iu cn bit l: ni dung ca bi ny s gip ch cho bn rt nhiu. V nhng kin thc


ny kh n gin hiu
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 69 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 70 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

n gin hn bn c th xem biu sau :

Tt c ni dung ca file.h s c t vo trong file.c, ngay ti v tr t directive #include file.h


Di y l nhng g ta c trong file.c:
Code C:
#include "file.h"
long myFunction(int cai_nay, double cai_kia)
{
/* Source code of function */
}
void otherFunction(long value)
{
/* Source code of function */
}
V nhng g c trong file.h :
C code:
long myFunction(int cai_nay, double cai_kia);
void otherFunction(long value);
Khi chng trnh tin x l chy n y, trc khi bin dch file.c, n s t file.h vo trong
file.c.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 71 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Thay v t tt c cc prototype vo trong cc file.c, chng ta nn chn cch t nhng


prototypes trong cc file.h, vic ny gn nh c xem l mt nguyn tc c bn khi lp
trnh. Ta c th u tin nhng prototypes ny ln u file.c (thng gp trong nhng
file chng trnh nh), nhng tin cho vic sp xp, ti khuyn bn hy t nhng
prototype ny trong nhng file.h.
Khi chng trnh bn vit ngy cng phc tp v c qu nhiu file.c, ch cn s dng
#include gip chng s dng chung 1 file.h, bn s cm thy mnh tht may mn khi
khng phi tn qu nhiu thi gian copy & paste li nhng prototype c cng 1 chc
nng.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 72 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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 ...*/

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 73 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Sau khi qua preprocessor:


Code C:
int main (int argc, char *argv[ ])
{
long mang_song = 3;
/* Code ...*/
Trc khi bin dch, tt c nhng #define s c thay th bng cc gi tr tng ng. Compiler
s thy ni dung trong file sau khi qua tin x l, trong tt cc nhng ch cn thay th u
c thc hin
Vy n thi im ny, u l li ch ca vic s dng nhng constant ?
Ok, nh ti gii thch vi bn l n khng chim thm b nh my tnh. iu ny c ngha l,
n giai on compilation th trong ch cn nhng con s trong m ngun ca bn.
Mt li ch khc khi s dng #define l vic thay th s c thc hin trong tt c cc file cha
dng #define. Khc vi khi bn khai bo mt constant trong mt function, n ch c hiu lc
trong function , sau n s b xa i. Nhng i vi #define, n s tc ng ln tt c cc
function c trong file , v iu ny tht s rt tin li cho nhng ngi lp trnh.
Bn mun mt v d c th v vic s dng #define?
y l mt v d m bn c th ng dng ngay. Khi bn m mt ca s chng trnh bng C,
hn l bn mun xc nh nhng constant ca tin x l ch ra kch thc ca ca s:
C Code:
#define CHIEUDAI_CUASO 800
#define CHIEURONG_CUASO 600
u im ca vic ny l nu v sau bn c nh thay i kch thc ca cc ca s (chng hn
nh v l do chng qu nh), bn ch cn thay i li nhng dng #define v sau bin dch li.
Vit thm rng: nhng dng #define thng c t trong nhng file.h, bn cnh cc prototype
(Bn c th xem nhng file.h ca cc th vin nh stdio.h, bn s thy lun c nhng dng
#define!).
Nhng #define ging nh cch thc n gin , gip bn thay i kch thc ca s bng vic
thay i nhng #define, thay v phi r sot li ton b ni dung file tm ni m bn m ca s
thay i li kch thc. Vic ny s tit kim rt nhiu thi gian cho bn trong vic lp trnh.
Tm tt li, nhng constants ca preprocessor cho php chnh sa chng trnh ca bn trc
vic compilation. Ging nh mt dng mini-configuration.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 74 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Define cho kch thc array


Ta thng dng cc define xc nh kch thc cc table. y l v d :
Code C:
#define KICH_THUOC_TOI_DA 1000
int main (int argc, char *argv[ ])
{
char line1[KICH_THUOC_TOI_DA], line2[KICH_THUOC_TOI_DA];
// ...
Nhng ti ngh rng chng ta khng th t bin s (KICH_THUOC_TOI_DA) gia
nhng du ngoc [ ] khi khi to table (line1[ ], line2[ ]) ?
ng vy, nhng < KICH_THUOC_TOI_DA > KHNG phi l mt bin s.
Ging nh ti ni, preprocessor s thay i ni dung ca file trc khi compilation, nh sau:
C Code:
int main (int argc, char *argv[ ])
{
char line1[1000], line2[1000];
// ...
...v on code ny l chnh xc.
Bng cch xc nh gi tr ca KICH_THUOC_TOI_DA, cc bn c th s dng n to
nhng mng c kch thc khc nhau. Nu trng hp sau ny mng ang s dng khng
ln, bn ch cn thay i gi tr dng #define, sau compile li, v mng dng char ca bn
s nhn kch thc mi m bn va thay i.

Tnh ton trong define


Chng ta c th thc hin mt vi php tnh trong define.
V d, on code sau s to constant CHIEUDAI_CUASO v CHIEURONG_CUASO, sau l
SOLUONG_PIXELS cha s lng pixel hin th trong ca s.
(vic tnh ton kh n gin: chiu rng*chiu di):
C Code:
#define CHIEUDAI_CUASO 800
#define CHIEUCAO_CUASO 600
#define SOLUONG_PIXELS (CHIEUDAI_CUASO * CHIEUCAO_CUASO)
Gi tr ca SOLUONG_PIXELS c thay i trc khi compile bng gi tr ca
(CHIEUDAI_CUASO * CHIEUCAO_CUASO), c ngha l (800*600), 480000.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 75 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hy lun t php tnh ca bn trong nhng du ngoc n nh cch ti lm.


Bn c th thc hin tt c cc php ton c bn m bn bit: php cng (+), php tr (-), php
nhn (*), php chia (/) v modulo (%).

Nhng constant c xc nh trc


Ngoi vic bn c th t to ra mt s constant ca ring bn, c tn ti mt s constant khc
c xc nh trc trong preprocessor
Ngay lc ny y, khi ti ang vit nhng dng hng dn ny cho bn, bn cn bit rng c
mt s constant ti cha tng s dng n, ti s gii thiu cho bn mt s constant c ch m
ti bit.
Mi constant s bt u v kt thc bi hai du gch di _

__LINE__ : v tr ca dng code hin ti


__FILE__ : tn ca file hin ti
__DATE__ : ngy thng hin ti
__TIME__ : thi gian hin ti khi compile

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 76 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Macro khng dng tham s (parameters)


y l mt v d ca macro n gin:
Code C:
#define CUCKOO( ) printf ("Cuckoo");
iu thay i y, l nhng du ngoc ( ) c thm vo sau t kha ( y l t CUCKOO).
Chng ta s xem ngay y tc dng ca n.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 77 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Test macro trong code source:


C Code:
#define CUCKOO( ) printf ("Cuckoo") ;
int main (int argc, char *argv[ ])
{
CUCKOO( )
return 0 ;
}
Console:
Cuckoo
Ti ng vi bn, rng y khng phi cch truyn thng m chng ta c hc cc bi
trc.
iu bn cn phi bit l, macro s c trc tip thay th li trong code source trc khi
compile.
on code trn s tng t nh on code sau y trong thi im compilation.
C Code:
int main (int argc, char *argv[ ])
{
printf ("Cuckoo");
return 0;
}
Nu bn hiu 2 on code trn, bn hu nh nm bt c nn tng ca cc macro.
Nhng chng ta ch c th t duy nht mt on code trong mi macro thi sao?
Khng, tht may mn l chng ta c th t nhiu dng code trong mi macro. Ch cn t mt
k t \ trc mi dng mi, tng t nh sau:
C Code:
#define GIOI_THIEU_BAN_THAN( )printf ("Xin chao, toi ten la Minh\n"); \
printf ("Toi song tai thanh pho HCM\n"); \
printf ("Toi thich nghe nhac\n");
int main (int argc, char *argv[ ])
{
GIOI_THIEU_BAN_THAN( )
return 0;
}
Console:
Xin chao, toi ten la Minh
Toi song tai thanh pho HCM
Toi thich nghe nhac
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 78 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cn lu l trong main, khi gi mt macro chng ta khng t du chm phy ;


cui dng. Thc t, y l mt dng cho preprocessor, chng ta khng cn thit phi kt
thc bng du chm phy.

Macro vi nhiu tham s (parameters)


Va ri chng ta bit lm cch no to ra mt macro khng dng parameter, c ngha l
khng ghi g vo trong parameter ca n. Tc dng chnh ca dng macro ny, l c th rt
ngn mt on code di c kh nng lp li nhiu ln trong code source ca bn.
Trong tnh hung nh vy, nhng macro ny cng hiu qu hn khi chng ta t vo chng
nhng parameter. N hot ng tng t nh cc function.
C Code:
#define NGUOI_TRUONG_THANH(tuoi) if (tuoi >= 18) \
printf ("Ban la nguoi truong thanh\n");
int main (int argc, char *argv[ ])
{
NGUOI_TRUONG_THANH(22)
return 0;
}
Console:
Ban la nguoi truong thanh
Cn vit thm rng ti c th thm vo mt else hin th Ban van chua truong
thanh . Hy lm th tp luyn, khng c cht kh khn no c v ng qun t thm
du antislash \ trc mi dng mi
Ti ngh bn c th hiu ngay cch hot ng ca on macro ny:
C Code:
#define NGUOI_TRUONG_THANH(tuoi) if (tuoi >= 18) \
printf ("Ban la nguoi truong thanh\n");
Ti t vo trong du ngoc ( ) tn ca bin s ta gi l "tuoi". Trong tt c on code c thay
th, "tuoi" s c thay th bng mt s khi ta gi li macro (trong trng hp ny l 22).
V on code trn s tng t nh sau ngay thi im bin dch chng trnh:
Code C:
int main (int argc, char *argv[ ])
{
if (22 >= 18)
printf ("Ban la nguoi truong thanh\n");
return 0;
}
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 79 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

on code source trn c thay i li, gi tr ca bin s "tuoi" c a thng vo.


V chng ta cng c th to mt macro cha nhiu parameters:
C Code:
#define NGUOI_TRUONG_THANH(tuoi, ten) if (tuoi >= 18) \
printf ("Ban la nguoi truong thanh %s\n", ten);
int main (int argc, char *argv[ ])
{
NGUOI_TRUONG_THANH(22, "Minh")
return 0;
}
l phn ln nhng g ta c th bit v macro.
Bnh thng chng ta khng cn thit phi s dng thng xuyn cc macro.
Nhng mt s trng hp, trong cc th vin tng i phc tp nh wxWidgets hay
QT (th vin dng to cc ca s bn s c hc sau ny) s dng rt nhiu cc
macro. Ti thy vic hng dn bn k t lc ny s gip bn thch ng d dng hn
trong tng lai.

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

#ifndef trnh cc inclusions v hn


#ifndef thng c dng trong cc file h trnh cc "inclusions v hn".
Th no l mt inclusion v hn ? ?
Hy tng tng, kh n gin.
Ti c mt file A.h v mt file B.h .
File A.h cha mt dng include file B.h. Ni dung ca file B s c a vo trong file A.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 81 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

My tnh c A.h v thy cn ni dung ca B.h


N nhy vo B.h c ni dung v nhn ra, y cng cn ni dung ca A.h
V vy, n a ni dung ca A.h vo B.h, v trong A.h li bo cn B.h!
Li mt ln na, my tnh i tm ng ch B.h v gp ng ch A.h quen thuc.
Vv v..vv,

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 82 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Instruction u tin my tnh thy l nh sau:


Code C:
#define DEF_ FILENAME
Ti thi im hin ti, constant c thit lp. Nu ln k tip, file li c yu cu include
tip tc, iu kin l khng cn ng na, v yu cu ny khng c thi hnh.
Tt nhin, bn c th gi tn constant nh cch bn mun. Ti gi n l DEF_FILENAME v
thi quen,
Nhng mi ngi c mt s thch ring m ng khng.
iu quan trng y l i tn constant cho mi tp tin .h khc nhau. Khng c dng cng
mt constant cho tt c nhng file.h, nu khng my tnh ch c file.h u tin ch khng phi
cc file khc.
V vy, bn hy thay th FILENAME vi tn ca file.h ca bn.
Nu bn mun chc chn nhng iu bn va nghe khng phi v ngha, ti mi
bn tham kho kin cc th vin .h chun c trong cng ca bn. Bn s tm thy
ngi ta xy dng chng trn cng mt nguyn tc (mt ifndef u v mt endif
cui). H mun chc chn rng khng c bt k inclusion infinie no xy ra.
Tht bun ci, ti cm thy ti ang dy bn mt ngn ng lp trnh mi.
Ngh th cng ng mt mt no , tuy nhin, i vi cc preprocessor, n s c m ngun ca
bn ngay trc khi gi cho trnh bin dch bng ngn ng ca ring n.
N cng c th lm c 2-3 vic nh nht khc m ti khng hng dn y, nhng nhn
chung, ngi ta thng s dng cc preprocessor directives trong cc file.h tng t nh cch
bn va c hc.
Oh, y l mt lu nh trc khi kt thc: Ti chn thnh khuyn bn thm vi dng trng
ngay sau #endif cui file.h ca bn.
trnh #endif l dng cui cng ca file, ti gp li khi bin dch v v ti v cng vt
v tm ra nguyn nhn xut pht t u. N bo li "No new line at the end of file"
V vy, hy t 2-3 dng trng sau #endif nh th ny:
C Code:
#endif

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 83 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

iu ny cng c p dng tng t trong cc file.c. Hy t mt s dng trng cui cng,


iu ny s gip bn trnh c cc li nhc u khng ng c.
Ti cha bao gi ni vi bn rng lp trnh l mt mn khoa hc chnh xc ng khng.
i khi, bn ri vo cc li qu k l m n ni bn phi t hi rng o bit do chng trnh
mnh vit hay do my tnh b ci o g m bin dch o c.
ng lo lng nu n xy ra vi bn, v y ch l mt trong cc tai nn khi bn chn ngh nghip
lp trnh ny. Nhng trc sau g th cc bn cng s c kt c nhng kinh nghim ng qu
sau mi ln gp li thi.
Nu sau tt c mi n lc t my m tm kim, ng p b chic my tnh thn yu v cng
ng ngi ngng i tham kho kin hoc nh s tr gip t cc bc tin bi hoc bn b,
nhng ngi c kinh nghim lp trnh, h s ch cho bn nguyn nhn v cch gii quyt cc
li k quc ny.

Ch thch: thut ng, t vng:


1. Preprocessor - Tin x l: L 1 qu trnh bao gm nhng chng trnh chy trc khi
bin dch.
2. Preprocessor directives Ch th tin x l : l nhng ch th cung cp hng dn trnh
bin dch x l trc cc thng tin trc khi bc vo giai on bin dch thc t.
3. Compile (v) & Compilation (n) Bin dch & Trnh bin dch: L hot ng dch ngn
ng lp trnh do bn vit sang ngn ng my tnh to ra mt chng trnh my tnh.
4. Compiler Cng c thc hin chc nng bin dch (xem li bi 1 chng 1).
5. Prototype Khai bo hm nguyn mu: Mt prototype tht ra l li ch dn cho my tnh.
N s thng bo trc vi my tnh c s tn ti ca function (xem li bi 1 chng 2).
6. Macro - Tp lnh thay th: y c hiu l mt tp hp cc cu lnh. Khi trong chng
trnh c nhng khi cu lnh ging nhau th ngi ta c th nh ngha chng bng 1
macro cho khi cu lnh v sau dng tn ca macro ny thay th cho ton b khi
lnh kia trong sut qu trnh vit chng trnh.
7. Source code M ngun: L tp hp ton b nhng g bn vit ra cho my tnh n
bin dch.
8. Constant Gi tr hng: L nhng gi tr khng i trong sut qu trnh lm vic ca my
tnh.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 84 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Bi 6: To ra nhng bin kiu ring ca bn


Ngn ng C cho php chng ta lm mt s iu tht s c bit: to ra nhng bin kiu ring ca
bn, ta c th gi l nhng bin t to. Hm nay chng ta s hc v struct (cu trc) v kiu
lit k (enum).
Vic to kiu bin ca ring bn s tr nn hu ch khi cc chng trnh bt u phc tp hn.
Hy tp trung v chng ta s tip tc s dng li nhng kin thc ny trong nhng bi hc tip
theo.
Lu rng cc th vin thng nh ngha theo kiu ring ca chng. Bn s khng phi mt
qu nhiu thi gian trc khi x l mt kiu bin, hoc c th sau ny l nhng kiu chng
trnh Window, Audio, Keyboard

nh ngha mt cu trc (struct):


Cu trc (struct) l mt tp hp gm nhng phn t c nhiu kiu khc nhau. Khng ging nh
khi lm vic vi mng (array), chng ta c yu cu s dng cng mt kiu nh dng i vi
cc phn t trong ton b mng. Vi cu trc (struct), bn c th to ra mt tp hp gm cc
bin kiu int, long, char hoc l double
Nhng cu trc thng c nh ngha trong file.h, cng ging nh khi khai bo nhng nguyn
mu (prototypes) hay nhng nh ngha (defines).
Chng ta cng xem mt VD:
C code:
struct TenCauTruc
{
int bien1;
int bien2;
int bienKhac;
double soThapphan;
};
khai bo mt cu trc, chng ta s bt u bng t kha struct, tip sau l tn i din
cho tp hp cc phn t (VD: sinhvien, taptin).
Ring c nhn ti thng hay p dng nguyn tc t tn ca bin t tn cho cu trc,
ti thng vit hoa ch ci u cho d nhn bit. Gi s, nu ti thy cm tenSinhvien th c
ngha l tn ca mt bin bnh thng v ch ci u ca n khng c vit hoa. Tng t
khi thy cm TenSinhVien, ti bit y l tn ca mt bin t to trong cu trc.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 85 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Sau tn cu trc cc bn nh ng m ngoc nhn { } ging khi thao tc vi hm.

Lu mt iu c bit sau: Bn phi t mt du chm phy (;) sau du ng ngoc


nhn. iu ny l bt buc v nu thiu n th chng trnh ca bn s khng th bin dch c.
V nhng th nm gia 2 ngoc nhn c g l ?
n gin thi, l nhng bin thnh phn c to ra xy dng nn cu trc ca bn. Mt
cu trc thng c t 2 bin tr ln, nhng c l bn cng khng cn quan tm qu nhiu v vn
ny.
Nh bn bit, vic khi to mt bin c bn khng qu phc tp. Tt c nhng cu trc m
bn thy tht ra ch l tp hp ca nhng bin kiu c bn nh int, long, Ch c iu g mi
m y c.

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).

H trc ta Oxy cha im A

Khi lm vic vi khng gian 2 chiu (2D), chng ta c 1 h trc ta gm:

Gc ta O. Ti y gi tr gc bng 0 v tng dn theo chiu mi tn ca 2 trc ta .


Trc honh (trc x) chy t tri sang phi, cha cc gi tr gi l honh .
Trc tung (trc y) chy t di ln trn, cha cc gi tr gi l tung .

Mt im bt k trn mt phng ta 2 chiu thng c 2 thng s xc nh v tr ca n


trn mt phng. Hai thng s gm honh (gi tr trn trc x) v tung (gi tr trn trc y).
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 86 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Chng ta thng dng mt bin tn x biu din gi tr ca honh , tng t nh vy ta s


dng bin y biu din gi tr ca tung .
Nu vit im A (x;y) c ngha l im ny c tn l A, honh ca n l x v tung l y.
VD: ta c mt im diembatky (20;10), c ngha l im ny c tn l diembatky, honh ca
n l x=20 v tung l y=10.
Bn c th vit mt cu trc Toadodiem lu tr cc gi tr honh trn trc x v tung
trn trc y ca mt im.
No no, n tht s khng kh u:
C code:
struct Toadodiem
{
int x; // hoanh do cua diem
int y; // tung do cua diem
};
Cu trc (srtuct) ca chng ta c tn l Toadodiem gm c 2 bin x v y ln lt biu
din honh trn trc x v tung trn trc y.
Nu mun bn hon ton c th to ra mt cu trc (struct) mi cho khng gian 3 chiu (3D), ch
vic thm vo mt bin z biu din ta trn trc (thng gi l cao ). Vi nhng
kin thc ny, chng ta c th to ra mt cu trc qun l cc im trong khng gian 3D.

Mng cu trc (mng struct):


Nhng cu trc c cha mng. Tht may mn, chng ta hon ton c th to cc mng c bn v
mng k t (string) trong cu trc.
No by gi gi s chng ta c mt cu trc Taikhoan lu tr thng tin ca mt ngi dng:
C code:
struct Taikhoan
{
char ten[100];
char ho[100];
char diachi[1000];
int tuoi;
int gioitinh; // Boolean : 1 = nam, 0 = nu
};

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 87 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cu trc Taikhoan cha 5 bin thnh phn, trong :

3 bin u tin kiu char lu tr cc thng tin ln lt l: tn, h, a ch.

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 ^^!

Bn c th ng dng cu trc ny to mt chng trnh lu tr danh sch ngi dng. D


nhin l bn c thm mt s bin khc b sung nhng thng tin m bn mun. Khng c gii
hn s lng bin trong mt cu trc nn bn ng lo.

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 88 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

R rng iu ny c ngha l khi bn vit cm t Toadodiem th n s thay th cho ton b cu


trc struct Toadodiem. Bng cch ny, bn s khng phi t cm struct Toadodiem mi khi khai
bo bin t to ca mnh na.
Vy by gi chng ta s vit li on code trong main.c sau khi dng lnh typedef nh:
C code:
int main (int argc, char *argv[ ])
{
Toadodiem diembatky; /* May tinh se hieu bien nay mang kieu cau truc Toadodiem sau khi da
duoc dat ten thay the boi typedef */
return 0;
}
Ti khuyn khch cc bn nn tp thi quen dng typedef vi cc cu trc ging nh cch ti
lm vi cu trc Toadodiem trong bi hc ny. Hu ht cc lp trnh vin u lm nh vy. Vic
ny s gip cc bn tit kim thi gian khi khng phi vit li nhiu ln t struct trong c on
code. C mt iu l l hnh nh mt lp trnh vin gii th thng kh li.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 89 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Chnh sa cc thnh phn ca cu trc:


By gi th bin diembatky c khi to, v nu chng ta mun thay i nhng thnh phn
trong n th sao. Lm th no tc ng vo bin x v y, no cng xem th nh:
C code:
int main (int argc, char *argv[ ])
{
Toadodiem diembatky;
diembatky.x = 10;
diembatky.y = 20;
return 0;
}
By gi th gi tr ca bin diembatky c thay i, chng ta cho n mt gi tr honh
x=20 v tung y=10. By gi diembatky ca chng ta ang ta (20;10).
Ti s minh ha mt cht bng mt phng ta Oxy trong hnh hc 2 chiu cc bn c ci
nhn trc quan hn:

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 90 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 91 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Gi s bn c mt game dnh cho 2 ngi:


C code:
Taikhoan nguoichoi1, nguoichoi2;
Bn thy khng, nh n m ngi chi s c th lu tr tn, h nhng thng tin ring ca
tng ngi.
Tuy nhin, chng ta cn c th lm tt hn, thm ch chng ta cn c th to mt mng cho cu
trc . Rt n gin thi:
C code:
Taikhoan nguoichoi[2];
khai bo bin tn ngi chi v tr th 0 trong mng trn th bn s vit nh sau:
C code:
nguoichoi[0].ten
Li ch ca vic s dng mng y l bn c th to ra mt vng lp yu cu nhp thng tin
ngi chi th 1 v th 2 nhng khng cn phi vit on code 2 ln. Ch cn tham chiu vo
tng thnh phn ca mng yu cu nhp tng tn, h, a ch
Bi Tp: Hy to mt mng v s dng vng lp yu cu ngi chi nhp vo nhng thng
tin khc. Hy bt u vi 2 ngi chi, nhng sau khi nm vng bn c th m rng hn theo
thch ca bn. Sau cng hin th ra mn hnh tt c nhng thng tin m bn thu thp c t
nhng ngi chi.

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:

Bin: chng ta thng cho n mang gi tr 0 lc u (trong nhng trng hp n gin).


Con tr: chng ta thng t gi tr l NULL. NULL l mt nh ngha c sn trong th vin
stdib.h ni chung n cng c ngha l gi tr 0, nhng chng ta vn s dng NULL bit c
rng l con tr ch khng phi bin bnh thng.
Mng: chng ta thng t gi tr 0 cho mi phn t ca mng.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 92 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Con tr cu trc (pointer of struct):


Mt con tr cu trc c to ra theo cch tng t nh mt con tr kiu int, double hay bt k
kiu c bn no khc:
C code:
Toadodiem* diembatky = NULL;
Chng ta va khi to mt con tr cho cu trc Toadodiem, con tr c tn l diembatky.
trnh lm cc bn b ng ti xin php ni thm rng bn vn c th t du * trc tn con
tr nh chng ta thng lm trc y, n s nh th ny:
C code:
Toadodiem *diembatky = NULL;
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 93 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 94 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Ok, nhng m c mt vn ... chng ta tht s khng th lm c:


C code:
void taoToadodiem(Toadodiem* diembatky)
{
*diembatky.x = 0;
*diembatky.y = 0;
}
Trng tht n gin ... nhng ti sao chng ta li khng th lm iu ? Nguyn nhn l v du
chm phn cch ch lm vic vi cc k t, n khng hiu du * l g. Nhng chng ta cn s
dng du * truy cp vo v thay i gi tr ca bin.
Gii php cho vn ny l chng ta s t mt cp ngoc n bao phn du sao v trc du
chm ngn cch li. Lc ny chng ta c th truy cp vo v thay i gi tr ca bin:
C code:
void taoToadodiem(Toadodiem* diembatky)
{
(*diembatky).x = 0;
(*diembatky).y = 0;
}
on code trn hot ng, bn c th kim tra th. Nhng bin kiu cu trc Toadodiem
c a vo hm v khi to cho chng gi tr x=0, y=0.
Trong ngn ng C, chng ta thng khi to cc cu trc theo cch n gin m ta thy
trn.
Tuy nhin, i vi C++, vic khi to thng c thit lp trong cc hm.
C++ tht s khng c g khc ngoi mt s ci tin ca C. Tt nhin l c rt nhiu iu ni
v ngn ng ny, t th cng tn c 1 cun sch vit v n, v chng ta s khng th hc tt c
cng mt lc by gi.

Mt phm tt thng c s dng ph bin:


Bn s thy rng con tr c s dng rt thng xuyn. Thng thn m ni, ngn ng C hu
nh ch s dng nhng cu trc con tr. Ti ang ni vi bn v iu ny mt cch rt nghim
tc (khng h ci nh, hehe)!
Nh ni trn, khi s dng cu trc con tr th ta phi vit th ny:
C code:
(*diembatky).x = 0;

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 95 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 96 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Kiu lit k (enum):


Kiu lit k (enum) l mt cch hi khc to ra cc bin ring ca bn. Kiu lit k (enum)
khng bt buc phi cha cc bin thnh phn nh cu trc (struct). y l mt danh sch cc
gi tr ph hp cho mt bin. Do kiu enum s chim 1 a ch b nh dng cho cc gi
gi tr m bn xc nh (v ch duy nht mi ln 1 gi tr).
Vd:
C code:
typedef enum Volume Volume;
enum Volume
{
LOW, MEDIUM, HIGH
}
Bn thy rng chng ta li s dng typedef nh dng trc .
to mt danh sch lit k, chng ta dng cm enum. Danh sch ca chng ta tn l Volume
(ci ny trn tivi ngi ta hay gi l m lng m). y l mt bin t to gip chng ta chn
ra 1 trong 3 gi tr c ch ra LOW hoc MEDIUM hoc HIGH.
By gi chng ta c th to ra mt bin Volume (m lng) iu chnh ln ca m
thanh khi nghe nhc trn my tnh.
y l mt v d, khi to bin m lng va cho nhc:
C code:
Volume music = MEDIUM;
Sau ny chng ta vn c th yu cu my tnh thay i gi tr ca m lng thnh HIGH hoc
LOW.

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 97 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 98 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Tng kt:

Cu trc (struct) l mt kiu bin t to, bn c th t mnh to ra n v s dng trong


chng trnh ca bn. Bin ny do bn nh ngha, khng nh cc kiu bin c bn nh
int, double

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.

Khi bn mun truy cp vo mt bin thnh phn trong cu trc, bn c th s dng du


chm ngn cch tn ca bin bnh thng v tn ca bin thnh phn ca cu trc,
VD: bienbinhthuong.bienthanhphan1

Nu bn mun s dng con tr truy cp vo bin thnh phn, bn ch cn thay du


chm thnh mi tn ( -> ), VD: contro -> bienthanhphan1

Mt kiu lit k cng l bin t to, bn c th a vo y danh sch cc gi tr nh


trong VD trn: LOW, MEDIUM, HIGH.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 99 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Bi 7: Nhng thao tc lm vic vi tp tin


Nhng li ca cc bin ch tn ti trong RAM. Mt khi bn hon thnh chng trnh ca
mnh, tt c cc bin ca bn s b xa khi b nh v gi tr ca chng s khng th khi phc
li.
Vy th lm cch no chng ta c th lu li im s cao nht trong game?
Lm sao mt chng trnh son tho vn bn hot ng nu tt c nhng g bn vit ra s b
xa khi tt chng trnh?
May mn thay, bn c th c v ghi d liu ca cc tp tin trong ngn ng C. Nhng tp tin ny
c lu vo cng (hard drive) ca my tnh: li ch l nhng tp tin s c lu li ti ,
ngay c khi bn dng chng trnh hay tt my tnh.
c th c v ghi d liu vo cc tp tin chng ta s ng dng tt c nhng g hc trc
y: con tr, cu trc, chui k t

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nhng th vin ny rt c bn, thc s rt c bn, nhng ti vn khuyn bn hy lun thm n


vo tt c nhng chng trnh ca bn sau ny, d cho chng c tc dng g i na.
Okie! By gi chng ta s xem nhng th vin tuyt vi c th lm g, chng ta c th gii
quyt cu hi lm sao m hoc c hoc ghi d liu vo mt tp tin. Di y l nhng g
lun din ra khi bn yu cu my tnh thc hin cc thao tc :
1. Chng ta s gi mt hm m tp tin , th s tr v cho chng ta mt con tr n tp tin.
2. Chng ta s kim tra xem thao tc m tp tin c thnh cng khng (tt nhin l trc tin tp tin
phi tn ti) bng cch kim tra cc gi tr con tr m ta nhn c. Nu con tr mang gi tr
NULL, c ngha l thao tc m tp tin tht bi, trong trng hp ny chng ta khng th tip
tc na (mn hnh s hin th thng bo li).
3. Trong trng hp thao tc m tp tin thnh cng (con tr khng mang gi tr NULL), chng ta c
th thoi mi c, ghi d liu ln tp tin thng qua chc nng ca cc hm m cc bn sp c
hc.
4. Mt khi bn lm xong vic vi cc tp tin, hn l bn phi ngh ti vic ng n li ng
khng? V chng ta c fclose.

u tin chng ta s tm hiu v 2 hm fopen v fclose. Sau khi nm r vn , chng ta s


bt u hc cch c ni dung ca mt tp tin v ghi d liu vo n.

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.

Hm ny s tr v mt con tr ti FILE. y l con tr n cu trc FILE. Cu trc ny c


nh ngha sn trong th vin stdio.h, bn c th m file th vin ra t mnh kim tra xem

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 101 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Ti sao tn ca cu trc (struct) FILE li c vit hoa ht vy? Ti nh nhng ci tn


c vit hoa l dnh ring cho cc nh ngha (define) v hng (constant) c m ???
y l quy tc do ti t t ra (v rt nhiu lp trnh vin khc cng lm theo quy tc tng t).
Bn khng bt buc phi lm theo nhng quy tc ca ti v ngi to ra th vin stdio chc cng
c nhng quy tc ca ring mnh. V l do duy nht ti c th gii thch cho bn ti sao FILE li
c vit hoa trong th vin stdio, l v ngi to ra n mun nh vy ^^!
ng mt ci tn lm bn mt tp trung. Ri bn s thy nhng th vin chng ta sp hc sau
ny cng s dng quy tc t tn rt ging vi ti, c th l khi t tn cu trc thng ch cn
vit hoa ch ci u tin.
Quay li vi hm fopen ca chng ta. N tr v FILE*. Con tr ny tht s rt quan trng, n s
gip ta c th c hoc ghi d liu vo mt tp tin.
By gi chng ta s to mt con tr ca FILE bt u hm ca bn (VD function main):
C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
return 0;
}
Con tr c khi to gi tr NULL ngay t u. Ti nhc li cho bn nh y l mt nguyn tc
c bn, hy lun khi to gi tr NULL cho con tr ngay t u nu bn khng c gi tr no
khc gn cho n. Nu khng thc hin iu ny, ri bn s tha h c thng bo li trong
tng lai nh.
Bn s thy rng vic vit struct FILE *taptin = NULL l khng cn thit. Ngi to ra
stdio cng to ra mt typedef nh ti dy bn ta c th vit l FILE *taptin = NULL.
Lu rng cu to ca cu trc c th thay i ty theo tng h iu hnh khc nhau (khng
nht thit lc no cng phi c cc bin thnh phn ging nhau). V vy, chng ta s khng bao
gi trc tip thay i ni dung ca FILE (vd nh ta s khng s dng taptin.bienthanhphan1
tc ng vo bin thnh phn ca FILE). Nhng bng cch s dng cc hm chng ta c th lm
vic c vi FILE.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 102 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

No by gi chng ta s gi hm fopen v ly gi tr n tr v trong con tr taptin. Nhng


trc khi lm iu , ti phi gii thch cho cc bn v tham s th hai, tham s chedoMotaptin.
Tht ra c mt on code c gi cho my tnh ni cho n bit rng tp tin ny s c
m trong ch ch c c d liu (read-only) hoc ch c ghi d liu (write-only)
hoc c 2 ch cng mt lc.
Sau y l nhng ch c th p dng cho tp tin ca bn trong my tnh:

r read only ch ch c: Bn c th c c ni dung ca tp tin nhng khng


th vit thm g vo (Tt nhin l tp tin c to ra trc ).

w write only ch ch vit: Bn c th vit thm hoc chnh sa ni dung tp tin


nhng li khng c c n (Nu cha tn ti th tp tin s c to ra ch ny).

a user addition ch b sung: Bn c th vit thm vo ni dung ca mt tp tin


bt u t v tr kt thc ni dung tp tin (Nu cha tn ti th tp tin s c to ra
ch ny).

r+ read and write ch c v vit: Bn c th c v vit trong ni dung ca tp


tin (Tt nhin l tp tin c to ra trc ).

w+ read and write, with removal of content beforehand ch c v vit ng


thi xa sch ni dung tp tin trc : Trc ht tp tin s khng cha bt k ni dung
no trc . Bn c th vit trong ni dung ca tp tin v c n sau (Nu cha tn ti
th tp tin s c to ra ch ny).

a+ add read/write at the end ch c v vit v tr cui cng: Bn c th vit v


c ni dung ca tp tin bt u t v tr kt thc ca ni dung trong tp tin (Nu cha tn
ti th tp tin s c to ra ch ny).

ti ni thm cho bn mt thng tin, ti ch mi cho bn thy mt phn cc ch ca thao tc


m tp tin. Tht ra cn mt iu na, vi mi ch m bn ang thy trn, nu bn thm k
t b sau k t u tin ca mi ch (rb, wb, ab, rb+, wb+, ab+), lc ny cc
tp tin ca bn s c m trong ch nh phn (binary). y l mt cch kh c bit m
chng ta s khng cp y. Tht ra ch hin th vn bn (text mode) l lu tr d liu
dng vn bn vd nh tn hin th (ch hin th cc k t), trong khi ch hin th s nh phn
(binary mode) l lu tr d liu dng s vd nh dung lng b nh (hu nh ch ton l s).
y l s khc nhau duy nht gia 2 ch hin th.
D l ch no th chng vn hot ng theo mt cch tng t nhau nh chng ta thy trong
bi hc ny.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 103 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

C nhn ti thng s dng ch r (ch c), w (ch vit), r+ (c v vit). Ch w+


c mt cht nguy him v n s xa sch ni dung tp tin ca bn m chng cho bn mt thng
bo no. Bn ch nn s dng ch ny khi mun lm mi (reset) li tp tin ca mnh.
V ch a c l n s hu dng trong mt s trng hp khi m bn ch mun b sung mt
s thng tin vo cui tp tin.
Nu bn ch c nh c mt tp tin, ti khuyn khch cc bn nn chn ch r, d
nhin l ch r+ cng s gip bn c c tp tin nhng trong ch r, tp tin ca bn s
m bo tnh bo mt, bn s khng s ngi no thay i ni dung ca tp tin, y cng l
mt cch bo v tp tin ca mnh.
Nu bn mun vit mt hm loadLevel ( ti cc cp tr chi) th nn chn ch r, cn
nu bn vit mt hm saveLevel ( lu li cc cp tr chi) th ch cn chn ch w l
.
on code sau y s m mt tp tin test.txt ch r+ (c / ghi):
C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
taptin = fopen("test.txt", "r+");
return 0;
}
Con tr taptin sau s thnh con tr hng n tp tin test.txt

Nhng tp tin test.txt c t u?


N nn c t trong cng mt th mc vi tp tin thc thi (executable) .exe ca bn.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 104 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

tin theo di bi hc ny, hy to mt tp tin test.txt trong th mc nh ti lm trong hnh


di:

Nh bn thy, ti ang s dng IDE Code::Blocks, y l cu tr li cho cu hi ti sao li tn


ti tp tin d n (project) c ui .cbp (ch khng phi l tp tin d n c ui chm .sln nh
nhng ngi dng Visual C++). Tm thi, iu quan trng cn y l tp tin test.txt c
t trong cng mt th mc vi chng trnh test.exe.

Vy tp tin c to phi c ui .txt mi c sao?


Khng. l do bn chn phn nh dng ca tp tin khi bn m tp tin. Bn c th sng to ra
kiu nh dng ca bn VD nh to mt tp tin ui chm .level lu li cp tr chi ca
mnh.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 105 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 106 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Kim tra thao tc m tp tin:


Tp tin cha a ch con tr taptin ca cu trc FILE. N c cp pht b nh bi fopen ( ).
By gi c 2 trng hp c th xy ra:

M tp tin thnh cng v bn hon ton c th tip tc thao tc vi tp tin (c th l c, hoc


vit thm vo tp tin).
M tp tin tht bi do tp tin cha tn ti hoc tp tin ang c s dng bi chng trnh
khc. Trong trng hp ny bn khng th lm g vi tp tin ht.

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;
}

Hy lm nh trn mi khi mun m tp tin. Nu bn khng lm hoc tp tin khng tn ti,


chng trnh s gp li.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 107 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

Gi tr bng 0: Nu tp tin c ng thnh cng.


Gi tr l EOF (End Of File): Nu vic ng tp tin tht bi. EOF c nh ngha sn trong
stdio.h tng ng vi mt s c bit, gi tr ny c nhim v thng bo cho my tnh v mt li
xy ra.

ng mt tp tin chng ta s lm nh sau:


C code:
fclose(taptin);
Tm li chng ta s lm theo cch sau m v ng mt tp tin trong project nh sau:
C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
taptin = fopen("test.txt", "r+");
if (taptin != NULL)
{
// Ban co the doc va ghi du lieu vao noi dung tap tin
// ...
fclose(taptin); // Dong tap tin da duoc mo
}
return 0;
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 108 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Nhng phng php c/ghi d liu trong tp tin:


Sau khi bit cch m v ng mt tp tin, by gi chng ta ch vic thm vo mt vi dng
code c v ghi d liu vo.
Chng ta s bt u vi vic hc cch ghi d liu vo mt tp tin trc (cng n gin thi) v
sau bn s hc cch lm th no c tp tin.

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:

fputc: vit mt k t vo tp tin (duy nht mi ln 1 k t).


fputs: vit mt chui vo tp tin.
fprintf: vit mt chui c nh dng vo tp tin, gn ging nh hm printf.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 109 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Hm ny tr v mt gi tr int, tng ng vi gi tr ca k t c thm vo. Gi tr int ny


s l EOF th hin cho 1 li, nu hm tr v 1 gi tr khc EOF th mi th vn bnh thng.
Ging nh khi thao tc m tp tin thnh cng, ti khng thng kim tra xem fputc c thc hin
tt nhim v ca n khng, nhng nu bn mun th bn c vic kim tra li.
on code sau y s thm k t A trong test.txt (nu tp tin tn ti n s c thay th, nu
cha th n s c to ra). C y mi th trong on code bn di, m tp tin, ghi thm
d liu v ng tp tin:
C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
taptin = fopen("test.txt", "w");
if (taptin != NULL)
{
fputc('A', taptin); // Ghi them vao tap tin ky tu A
fclose(taptin);
}
return 0;
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 110 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Th m tp tin test.txt ca bn ra kim tra th xem.


Tht k diu ng khng, by gi n cha k t A nh hnh di:

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

No by gi chng ta s th thm mt chui vo tp tin:


C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
taptin = fopen("test.txt", "w");
if (taptin != NULL)
{
fputs("Xin chao anh chang dep trai\nBan co khoe khong ?", taptin);
fclose(taptin);
}
return 0;
}

Tp tin sau khi chy dng code trn s nh sau:

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 112 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

on code sau y s hi tui ca mt ngi v ghi kt qu nhn c vo tp tin:


C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
int tuoi = 0;
taptin = fopen("test.txt", "w");
if (taptin != NULL)
{
// Sau y chng ta s hi tui
printf (" Ban bao nhieu tuoi ? ");
scanf ("%d", &tuoi);
// V by gi l ghi d liu vo tp tin
fprintf (taptin, "Nguoi dang su dung chiec may tinh nay %d tuoi", tuoi);
fclose(taptin);
}
return 0;
}

V kt qu khi bn m tp tin test.txt s nh hnh sau:

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 113 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Nhng lm sao ta bit c mnh s c k t no? Chng hn nh bn mun c k t


th 3 hoc th 10 th lm sao c?
Tht ra trong thc t, khi bn c mt tp tin, s xut hin mt du nhy o. Du nhy ny s
khng hin th ln mn hnh cho bn thy. Bn c th tng tng n ging nh du nhy khi
bn chnh sa ni dung vn bn trn Notepad hoc Microsoft Word. N c nhim v ch ra bn
ang u trong tp tin.
Chng ta s thy ngay sau y du nhy o nm v tr no trong tp tin v lm th no thay
i v tr du nhy .(chuyn n v u tp tin hoc mt v tr c th no ca k t, vd nh v
tr ca k t th 10).
Mi ln bn dng fgetc c mt k t th hm s gi du nhy o vo . Nu bn gi hm
ny li mt ln na, th hm s tip tc t v tr c tip k t th 2, th 3 v c th c tip.
Bn c th to ra mt vng lp (loop) ln lt c tng k t trong tp tin.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 114 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Chng ta s vit mt on code ln lt c tt c cc k t trong tp tin, ng thi in ra mn


hnh nhng k t c c. Vng lp s ngng li khi hm fgetc tr v gi tr EOF (End Of File,
nhm thng bo cho my tnh l kt thc mt tp tin):
C Code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
int kytuHientai = 0;
taptin = fopen("test.txt", "r");
if (taptin != NULL)
{
// Vong lap lan luot doc tung ky tu
do
{
kytuHientai = fgetc(taptin); // Doc ky tu
printf ("%c", kytuHientai); // In ky tu do ra man hinh
} while (kytuHientai != EOF); // fgetc tiep tuc duoc goi lai vi bien kytuHientai khac EOF
fclose(taptin);
}
return 0;
}
Mn hnh console s hin th ton b ni dung tp tin, VD:
Console:
Xin chao, day la noi dung cua tap tin test.txt !
Hm fgets:
Hm ny s c mt chui trong tp tin. N s gip bn tit kim thi gian thay v phi c tng
k t mt. Hm s c mt chui trn mt dng (n s dng li khi gp k t xung dng \n).
Nu bn mun c nhiu dng th hy to ra mt vng lp.
Sau y l prototype ca hm fgets:
C code:
char* fgets(char* chuoi, int soKytuDuocdoc, FILE* taptin);

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 115 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hm ny c cha mt tham s hi k quc, nhng n thc s s rt hu ch: soKytuDuocdoc. N


s thng bo cho hm fgets ngng c dng ni dung nu vt qu s lng k t tng ng.
Li ch: N s bo m rng chng ta s khng ri vo tnh trng trn b nh. Tht vy, nu
mt dng ca bn qu ln so vi chui, hm c th s phi c nhiu k t hn. iu ny c th
gy ra li cho chng trnh.
u tin chng ta s xem lm th no c ni dung trn mt dng vi hm fgets (chng ta
cng s bit cch c ton b tp tin).
thc hin iu ny, chng ta s to ra mt chui ln cha ni dung ca dng m ta s
c (t nht l vy, v ta khng th chc chn c 100% ni dung dng l bao nhiu). Bn s
thy li ch ca vic s dng nh ngha (define) xc nh trc kch thc ca mng (array):
C code:
#define SO_KY_TU_TOI_DA 1000 // Kich thuoc cua mang la 1000
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
char chuoi[SO_KY_TU_TOI_DA] = ""; // Chuoi co kich thuoc bang SO_KY_TU_TOI_DA
taptin = fopen("test.txt", "r");
if (taptin != NULL)
{
fgets (chuoi, SO_KY_TU_TOI_DA, taptin); /* Co toi da SO_KY_TU_TOI_DA trong tap
tin duoc doc, chung duoc luu tru vao "chuoi" */
printf ("%s", chuoi); // Hien thi chuoi len man hinh
fclose (taptin);
}
return 0;
}
Kt qu vn ging nh code ca hm fgetc m chng ta thy trc , y l nhng ni dung
hin th trn console:
Console:
Xin chao, day la noi dung cua tap tin test.txt !
S khc bit y l chng ta khng s dng vng lp. N hin th ton b chui trong mt ln.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 116 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

Mt ln xc nh kch thc cho mng khi c khi to.


V ln th hai trong hm fgets nhm gii hn s k t ti a s c c.

Li ch ca vic ny l nu bn thy rng chui cha ln c ht ni dung ca mt dng


trong tp tin, bn ch cn thay i gi tr trn dng nh ngha (dng cha #define) v sau bin
dch li chng trnh. iu ny gip bn tit kim thi gian v khng cn phi c li ton b
code tm ch thay i kch thc ca mng. Tin x l (preprocessor) s thay th ton b gi
tr c ca SO_KY_TU_TOI_DA bng gi tr mi m bn mun.
Nh ti ni, hm fgets c ni dung trn mt dng. N s ngng c dng nu vt qu s
k t ti a c c do bn quy nh.
Nhng cu hi l: By gi n ch c c mi ln mt dng vy th lm th qui no ta c
th c c ton b ni dung ca tp tin? Cu tr li v cng n gin: Vng lp (loop)
Hm fgets s tr v gi tr NULL nu khng c c ni dung m bn yu cu.
Cc vng lp s ngng trc khi fgets tr v gi tr NULL.
Cn thm vo mt th fgets khng tr v NULL:
C code:
#define SO_KY_TU_TOI_DA 1000
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
char chuoi[SO_KY_TU_TOI_DA] = "";
taptin = fopen("test.txt", "r");
if (taptin != NULL)
{
while (fgets(chuoi, SO_KY_TU_TOI_DA, taptin) != NULL); /* Cu viec doc noi dung tap
tin mien sao khong xuat hien loi (NULL)*/
printf ("%s", chuoi); // Hien thi noi dung doc duoc len man hinh
fclose(taptin);
}
return 0;
}
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 117 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

on code trn s c ton b ni dung ca tp tin, tng dng mt.


y l nhng dng th v nht ca on code, dng code c s dng vng lp while:
C code:
while (fgets (chuoi, SO_KY_TU_TOI_DA, taptin) != NULL);
Dng code trn thc hin 2 vic: N s c ni dung ca mt dng trong tp tin v kim tra xem
fgets c tr v gi tr NULL hay khng. C th hiu ni dung ca dng code trn l c ni
dung ca mt dng v tip tc c dng tip theo cho ti khi kt thc tp tin.
Hm fscanf:
Vn l mt nguyn tc hot ng tng t vi hm scanf m chng ta tng hc.
Hm ny c ni dung ca tp tin nhng n phi c vit mt cch chnh xc.
Gi s tp tin ca bn cha 3 s c phn cch bng khong trng, VD l nhng im s
cao nht ca mt tr chi 15 20 30.
V bn mun ly tng s di dng bin kiu int.
Hm fscanf s gip bn lm c iu mt cch d dng:
C code:
int main (int argc, char *argv[ ])
{
FILE* taptin = NULL;
int diemso[3] = {0}; // Mang chua 3 gia tri diem so cao nhat
taptin = fopen("test.txt", "r");
if (taptin != NULL)
{
fscanf (taptin, "%d %d %d", &diemso[0], &diemso[1], &diemso[2]);
printf ("Cac diem so cao nhat la: %d, %d va %d", diemso[0], diemso[1], diemso[2]);
fclose (taptin);
}
return 0;
}
Console:
Cac diem so cao nhat la: 15, 20 va 30
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 118 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hm fseek s di chuyn du nhy o t v tr gc (c ch nh bi bin vitri_hientai) n v


tr ca mt k t trong tp tin (c ch nh theo gi tr ca bin vitri_chuyenden).

Gi tr ca vitri_chuyenden c th l mt s dng ( du nhy di chuyn tin ln), ng


im khng di chuyn (gi tr bng 0), v s m ( di chuyn li li).
Gi tr khi to c th l mt trong ba hng s (constant) sau (khai bo #define nh), xem
no:
1. SEEK_SET: ch ra v tr bt u ca tp tin
2. SEEK_CUR: ch ra v tr hin ti ca du nhy o.
3. SEEK_END: ch ra v tr kt thc ca tp tin.

Sau y l mt vi v d chng ta bit cch lm vic vi nhng bin vitri_hientai v


vitri_hientai.

on code sau y s t du nhy o vo v tr ca k t th 2 sau v tr bt u tp tin:

C code:
fseek (taptin, 2, SEEK_SET);

on code ny s t du nhy o vo v tr ca k t th 4 trc v tr hin ti ca du nhy:

C code:
fseek (taptin, -4, SEEK_CUR);
Lu l vi gi tr m nh trn, du nhy s di chuyn ngc v trc.

on code sau y s t du nhy o v v tr cui tp tin:

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.

Nhng lm th o no bit c v tr no l u ti tm n m c hoc ghi d liu?

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 120 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

iu ny ty thuc vo cch sp xp ni dung tp tin ca bn. Nu tp tin ny l do bn vit ra,


th chc hn l bn phi bit r n c cu trc nh th no. Bi vy bn s bit nhng thng tin
m bn cn nm u. VD: bn sp xp nhng im s ngi chi v tr 0, tn ca ngi chi
cui cng nm v tr th 50
Sau ny chng ta s lm vic vi nhng tp tin khng l, v nu nh bn khng c mt quy tc
sp xp ni dung tp tin ring ca mnh, bn s khng bit phi lm th no ly nhng thng
tin m mnh cn u. Hy nh rng bn chnh l ngi sp xp tt c nhng ni dung ny trong
tp tin, tt c u ty thuc vo bn. Chng hn nh bn quy nh:ti im ca ngi chi
th nht ti dng 1, im ca ngi chi th 2 ti dng 2
Hm fseek c th s khng hot ng tt khi dng n m nhng tp tin cha ni dung dng
vn bn. Ni chung ngi ta thng dng n m cc tp tin cha ni dung dng nh phn.
Khi mt ngi c hoc ghi d liu trong tp tin dng vn bn, thng th k t s c
thay th bng k t. iu duy nht hu dng trong ch tp tin vn bn khi s dng hm fseek
l n gip a bn v v tr u hoc cui tp tin.
Hm rewind: quay v v tr ban u.
Cch ny tng t nh vic bn s dng fseek a du nhy o v v tr 0 ca tp tin.
C code:
void rewind (FILE* taptin);
Cch vit hm ca n ging nh nguyn mu trn, khng c g gii thch thm.

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.

im khc bit nhng hm ny l chng khng yu cu bn s dng con tr taptin. Nhng


hm ny ch cn xc nh tn ca tp tin xa hoc i tn tp tin .
Hm rename: i tn tp tin.
Prototype ca hm l:
C code:
int rename(const char* teCu, const char* tenMoi);

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 121 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hm s tr v gi tr 0 nu i tn thnh cng. Nu khng thnh cng n s tr v mt gi tr


khc 0. V sau y l mt v d:
C code:
int main (int argc, char *argv[ ])
{
rename("test.txt", "test_rename.txt");
return 0;
}
Hm remove: Xa tp tin.
Hm ny s xa tp tin ngay v lun m khng cn hi kin hay thng bo cho bn.
C code:
int remove(const char* tentaptinMuonXoa);

Bn phi cn thn khi s dng hm ny. N s xa tp tin ca bn m khng cn xc nhn


li. Tp tin s khng b a vo thng rc (recycle bin) m n s b xa hon ton khi my tnh
ca bn. S khng c cch no khi phc li tp tin (tr khi bn dng th thut c bit
khi phc li tp tin, nhng thng th rt kh thnh cng).
V hm remove ny cng s kt thc bi hc ng theo cng nng ca n. Chng ta to ra tp
tin test.txt v by gi t tay mnh s xa n:
C code:
int main (int argc, char *argv[ ])
{
remove("test.txt");
return 0;
}
Kt thc bi hc!

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 122 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 123 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Trong chng ny chng ta s:


1. Tm hiu v cc chc nng ca b nh (vng, mt ln na) bit kch thc ca bin s
thay i th no ty thuc vo kiu ca n (int/float/char/double)
2. Sau chng ta i thng vo vn chnh, lm th no yu cu h iu hnh cp pht b
nh mt cch th cng. Chng ta s lm ci vic u bi hc nu ra: cp pht ng.
3. Cui cng, chng ta s xem xem vic cp pht ng ny s mang li li ch g thng qua vic
hc cch to ra mng m khng bit trc kch thc ca n trong chng trnh l bao nhiu.
Kch thc ca cc bin:
Ty thuc vo loi bin m bn ang mun to ra (int/char/double/float), bn s cn nhiu
hoc t b nh.
Thc t l lu tr mt s chy t -128 n 127 (mt bin kiu float), my tnh ch cn 1 byte
trong b nh, n tht s rt nh.
Tuy nhin vi mt bin int, n thng chim 4 byte trong b nh, cn vi mt bin kiu double
s l 8 byte.
Vn l khng phi lc no mi th cng din ra ng nh nhng g chng ta ni. N cn
ph thuc vo my tnh na: chng hn nh bin kiu int ca bn c th chim 8 byte, ai m bit
c ?
V mc ch ca chng ta l kim tra xem mi kiu bin s chim bao nhiu b nh trn my
tnh ca bn.
C mt cch rt d kim tra l dng sizeof ( ).
Khng ging nh nhng g chng ta tng hc trc y, n khng phi l mt hm (function),
m l mt chc nng c bn ca ngn ng C, bn ch cn t i tng bn mun kim tra kch
thc vo trong cp du ( ) thy c iu bn mun.
bit kch thc ca mt bin kiu int chng ta s lm nh sau:
C code:
sizeof(int)
Ti thi im bt u bin dch, n s c thay th bi nhng con s: l s b nh m mt
bin kiu int s chim trong b nh my tnh ca bn, sizeof (int) l 4, ngha l n chim 4 byte
trong b nh. Theo l thuyt th n cng s c gi tr tng t nhng y khng phi l mt quy
lut khng i. Chng ta cng kim tra bng cch dng printf hin th gi tr,

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 124 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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)

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 125 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Cu tr li l c! sizeof ( ) cng hot ng vi cu trc (structure)!


C code:
typedef struct Toado Toado;
struct Toado
{
int x;
int y;
};
int main (int argc, char *argv[ ])
{
printf ("Toado : %d byte\n", sizeof(Toado));
return 0;
}
Console:
Toado : 8 byte
Vi nhng cu trc cha nhiu bin thnh phn th s chim nhiu b nh hn. Qu l hp l
lun ng khng ?
Mt cch mi kim tra.
Cho ti thi im ny th m hnh b nh ca ti vn cha c r rng lm. V by gi chng
ta s lm r mi th, cui cng th ta cng c th bit chnh xc kch thc ca tng loi bin.
Nu bn khai bo mt bin kiu int:
C code:
int number = 18;
v sizeof (int) ch ra rng chng ta s mn 4 byte ca my tnh, sau bin s chim 4
byte ny ca b nh.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 126 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

Bn thy r rng y l bin kiu int chim 4 byte trong b nh.


N bt u t a ch 1600 (a ch m bin c ch nh lc u) v kt thc a ch 1603.
Bin tip theo s khng th lu vo a ch no trong 4 a ch trn, n s c bt u t 1604.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 127 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nu chng ta lm iu tng t vi mt bin kiu char, bin s ch chim mt byte trong b nh


nh hnh sau:

Hy th tng tng chng ta c mt mng cc bin kiu int.


Mi mt trong mng s chim 4 byte. Vy nu mng ca chng ta c 100 th sao:
C code:
int mang[100];
Vy chnh xc l chng ta s chim 4 x 100 = 400 byte trong b nh.

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 128 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Lu nu bn to mt mng kiu Toado th:


C code:
Toado mang[100];
Ln ny chng ta s s dng 8 x 100 = 800 byte trong b nh.
iu quan trng l bn phi c gng hiu nhng tnh ton nh ca phn sau.
Cp pht ng.
No by gi chng ta s tm hiu su v n. Ti s nhc li mc tiu ca chng ta: hc cch yu
cu cp pht b nh bng cch th cng.
Chng ta cn khai bo th vin <stdlib.h>. Nu bn tin nhng g ti khuyn th tt nht l nn
khai bo th vin ny trong tt c cc chng trnh ca bn. Th vin ny cha 2 hm m chng
ta cn n:

malloc (Memory allocation, ngha l cp pht b nh ng): hm s yu cu h iu


hnh c s dng b nh my tnh.
free (free, ngha l gii phng): hm s gii phng vng nh c h iu hnh
ch nh cho yu cu cp pht b nh ca chng ta trc , t lc ny, cc chng trnh
khc c th t do s dng vng nh .

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 129 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Hm malloc: Yu cu cp pht b nh.


y l prototype ca hm malloc, n trng kh ng:
C code:
void* malloc(size_t soByteCansudung);
Hm ch cn 1 tham s: l s byte cn s dng. V vy, ch cn s dng sizeof ( int) trong
tham s ny d tr khng gian lu tr mt bin kiu int.
Nhng hnh nh c g hi l v gi tr tr v ca hm: n tr v 1 void* ! Nu cc bn cn
nh v nhng g hc bi hc v hm (function), ti tng ni vi bn void c ngha l tr
v khng g c, v chng ta s dng kiu void ny ch nh hm ny s khng tr v gi tr
no ht.
Vy y chng ta c 1 hm s tr v con tr rng sao? iu ny c n khng? Xem ra cc
lp trnh vin kh hi hc nh.
Bn c bnh tnh, c l do ht y. Thc t l, hm ny s tr v mt con tr n a ch m h
iu hnh cp pht cho bin ca bn. Nu h iu hnh cp cho bin ca bn nh a
ch 1600 th n s tr v gi tr con tr tng ng vi a ch 1600.
Vn l hm malloc khng bit c kiu bin m bn mun to. Thc t l bn a cho hm
mt tham s: s lng byte cn s dng trong b nh. Nu n l 4 byte, n c th l bin kiu int
hoc long int chng hn.
V malloc khng bit nn tr v gi tr kiu no, n tr v kiu void*. N s l mt con tr n
bt k kiu no cng c. Chng ta cng c th xem n l mt con tr linh ng.
No chng ta thc hnh thi.
Nu ti mun vui v mt cht (e hm!), ti s t mnh to mt bin kiu int trong b nh, ti
ang cp n vic s dng malloc vi sizeof (int) byte trong b nh.
Ti nhn c kt qu ca malloc l con tr n int.
C code:
int* capphatBonho = NULL; // Tao mot con tro kieu int
capphatBonho = malloc(sizeof(int)); // Nhung dia ch danh cho con tro da duoc danh rieng
Kt thc on code trn, capphatBonho l mt con ang cha a ch m bn mun h iu hnh
d tr sn vng nh cho bn, vd nh a ch 1600.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 130 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Kim tra con tr.


Hm malloc gi mt bin capphatBonho cha a ch con tr m h iu hnh dnh ring
cho bn. C 2 trng hp c th xy ra:

Nu vic cp pht thnh cng, con tr ca chng ta s mang gi tr ng vi a ch


c my tnh ch nh.
Nu vic cp pht khng thnh cng, con tr s mang gi tr NULL.

Vic cp pht b nh tht bi rt him thy nhng n c xy ra, chng hn bn yu cu 34GB b


nh RAM, kh m yu cu my tnh p ng cho bn c.
Chng ta s gp mt hm c bn m bn cha tng thy nhng bi trc: exit ( ). N s ngng
chng trnh ngay lp tc. N cn mt tham s: chnh l gi tr m chng trnh phi tr v
(chnh xc hn th y l gi tr tr v ca hm main ( )).
C code:
int main (int argc, char *argv[ ])
{
int* capphatBonho = NULL;
capphatBonho = malloc(sizeof(int));
if (capphatBonho == NULL) // Neu viec cap phat bo nho ko thanh cong
{
exit(0); // Chung ta se ngung chuong trinh ngay lap tuc
}
// Chuong trinh se tiep tuc hoat dong neu moi viec dien ra thuan loi
return 0;
}
Nu gi tr con tr khc NULL, chng trnh c th tip tc hot ng, ngc li n s hin th
thng bo li hoc ngng chng trnh ngay lp tc. Nguyn nhn c th l do dung lng b
nh bn yu cu vt qu kh nng ca my tnh.
Hm free: Gii phng b nh.
Cng ging nh khi ta s dng fclose ng tp tin khi khng cn s dng n, chng ta s s
dng hm free gii phng nhng vng b nh khng cn cn s dng na.
C code:
void free(void* contro);
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 131 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Chng ta cn hm free gip gii phng cc vng a ch ca b nh.


V vy chng ta s gi cho n tham s l nhng con tr, VD nh con tr capphatBonho trong v
d lc ny.
Sau y l ton b chng trnh ca chng ta t u n gi.
Nhn chung th cch hot ng cng khng c qu nhiu im khc bit so vi nhng g ta
hc khi thao tc vi tp tin.
C code:
int main (int argc, char *argv[ ])
{
int* capphatBonho = NULL;
capphatBonho = malloc(sizeof(int));
if (capphatBonho == NULL) // chung ta kiem tra xem bo nho da duoc cap phat chua
{
exit(0); // Error: co loi va chuong trinh se bi ngung ngay lap tuc
}
// Bo nho da duoc cap phat va san sang de su dung
free(capphatBonho); // Chung ta ko can su dung bo nho nua, giai phong no thoi
return 0;
}

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 132 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Hy lu : capphatBonho l mt con tr, cch s dng n khc vi cch bn lm vic vi


mt bin bnh thng. c c gi tr ca con tr, bn phi t du * trc capphatBonho
(xem li dng code ca printf thy r hn). Trong khi , nu mun ch ra a ch ca con tr
th ch cn vit tn ca n capphatBonho (xem dng scanf nh).
Nhng iu ny bn c hc trong bi v con tr ri. Tuy nhin, cn phi c mt thi gian
nht nh bn c th quen vi con tr, v kh nng nhm ln vn rt cao. Trong trng hp
ny bn nn c li mt ln bi hc v con tr, y l nhng kin thc c bn rt quan trng.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 133 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

T ng: y l nhng g bn tng hc trc y mi khi to ra mt bin.


Th cng (cp pht ng): Cch m ti dy cho bn trong bi hc ny.
Ti khng hiu sao chng ta phi hc ci cch phc tp ny v liu c cn thit khng?

ng l c phc tp hn mt cht nhng n c v dng khng? Khng! i khi chng ta


buc phi t mnh phn b b nh, ti s cho bn thy mt trng hp ngay sau y.
Cp pht ng trong mng.
Ti by gi chng ta ch s dng phng php cp pht ng to nhng bin bnh thng
n gin. Nhng nhn chung mi ngi vn khng thng dng cch ny, phng php t ng
r rng l n gin hn nhiu.
C phi bn ang t hi, vy th khi no chng ta nn dng phng php ny? Thng th ngi
ta s dng phng php cp pht ng khi to ra mt mng (array) m ta khng bit trc kch
thc ca n khi chy chng trnh l bao nhiu.
V d, tng tng bn s to mt chng trnh lu tr tui nhng ngi bn ca bn vo mt
mng. Bn c th mt mng kiu int lu tr tui ca h, nh sau:
C code:
int tuoiBanbe[15];

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 134 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nhng ai dm m bo vi bn rng ngi dng ch c 15 ngi bn? C th nhiu hn ch.


Khi vit chng trnh, bn khng th no bit trc c kch thc no l ph hp cho mng
ca bn. Bn ch c th bit khi chng trnh chy, v bn phi hi ngi dng c bao nhiu
bn b.
Li ch ca cp pht ng l : Chng ta s hi s lng bn b ca ngi dng trc, v
sau cp pht ng s to ra mng vi kch thc chnh xc nh c yu cu (khng qu
nh m cng khng qu ln). Nu ngi dng c 15 ngi bn, chng ta s to mt mng vi 15
gi tr int, tng t nu h c 28 ngi bn, n s to ra mt mng vi 28 gi tr int,
Nh ti tng dy bn, ngn ng C khng th to ra mt mng vi kch thc c ch nh
bng mt bin:
C code:
int banbe[soluongBanbe];

on code trn c th s hot ng vi mt s trnh bin dch trong mt s trng hp c


th, nhng n c khuyn co l khng nn s dng nh vy.
Li ch ca cp pht ng l n cho php ta to ra mt mng c kch thc khp vi s lng
bn b nh bin soluongBanbe, da vo on code c th hot ng bt k u, vi bt k
trnh bin dch no.
Chng ta s dng hm malloc yu cu cp pht soluongBanbe * sizeof(int) byte trong b nh:
C code:
banbe = malloc(soluongBanbe * sizeof(int));
on code ny s gip ta to ra mt mng kiu int vi kch thc ng theo nh s lng bn b
ca ngi dng.
Sau y l nhng g m chng trnh s ln lt thc hin:
1. Yu cu ngi dng cho bit h c bao nhiu bn b.
2. To ra mt mng c kch thc bng vi s lng bn b ca ngi dng (bng cch s
dng malloc)
3. Ln lt hi tui ca tng ngi bn v lu tr vo trong mng.
4. Hin th tt c tui c lu vo mng trc .
5. Cui cng, v chng ta khng cn cn n mng tui ca nhng ngi bn ny na, ta s
gii phng b nh bng hm free.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 135 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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;
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 136 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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 )

Ngi ta c th bit c s byte m kiu bin s chim trong b nh bng cch s


dng sizeof ( ).

Cp pht ng l hnh ng d tr vng nh cho bin hoc mng.

Vic phn b b nh c thc hin vi hm malloc ( ) v iu quan trng ng nn


qun l hy nh gii phng b nh bng hm free ( ) ngay sau khi bn khng cn n
vng nh na.

c bit cp pht ng cho php to ra mng c kch thc c xc nh bi mt bin


trong khi chy chng trnh.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 137 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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:

Ch ci bn on c cha trong t b n, lc ny mn hnh s hin th ch m bn tm


thy trong t b n .
Ch ci bn on khng c trong t ang b n (chng hn nh khi ny bn on ch A
nhng t b n l RED th lm g c ch A): My tnh s thng bo cho ngi chi l ch
va c on khng c cha trong t ang b n v t ng tr bt i mt ln on ca
h. Cho ti khi chng ta s dng ht tt c cc lt on m vn cha tm ra t b n th
xc nh l thua cmnr!!! n y th GAME OVER.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 138 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Trng hp t cha nhiu k t ging nhau?


Trong mt s t, s c th xut hin 2 hoc nhiu ch ci ging nhau. VD: c 2 ch R trong t
PROGRAM hoc c 3 ch E trong EXCELLENT.
Vy iu g s xy ra trong nhng trng hp trn? Lut ca tr ny l: nu ngi chi on
ng ch E trong t EXCELLENT th mn hnh s hin th c 3 ch cng mt lc:
Console:
Tu bi an: E**E**E**
Ngi chi s khng cn phi g ch E 3 ln.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 139 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Xem th tr ngi treo c hon chnh.


Sau y l nhng g nn c to ra v bn s thy chng xut hin trong tr chi m bn s
vit:
Console:
Chao mung ban tham gia tro choi NGUOI TREO CO!
Ban co 10 luot doan.
Tu bi an la gi? ********
Hay doan mot chu cai: Z
Ban co 9 luot doan.
Tu bi an la gi? ********
Hay doan mot chu cai: A
Ban co 9 luot doan.
Tu bi an la gi? *A******
Hay doan mot chu cai: K
Ban co 9 luot doan.
Tu bi an la gi? *A*****K
Hay doan mot chu cai:
V c nh vy cho ti khi ngi chi tm c t b n (hoc vt qu s lt on cho
php):
Console:
Ban co 3 luot doan.
Tu bi an la gi? FACEB**K
Hay doan mot chu cai: O
Xin chuc mung! Tu bi mat la: FACEBOOK

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 140 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nhp ch ci vo mn hnh console.


c mt ch ci trn mn hnh console c l l phc tp hn bn thy.
Bng cht trc gic, c th nhp mt ch ci bn nn ngh v:
C code:
scanf ("%c", &chuCaiBiMat);
V thc t th y l mt tng tt, %c s c thay bng mt ch ci, chng ta s lu tr
trong bin chuCaiBiMat (tt nhin y phi l mt bin kiu char).
Tt c mi vic ang din ra rt tt min l chng ta khng thay i scanf. Bn c th th
chy on m sau:
C code:
int main (int argc, char* argv[ ])
{
char chuCaiBiMat = 0;
scanf ("%c", &chuCaiBiMat);
printf ("%c", chuCaiBiMat);
scanf ("%c", &chuCaiBiMat);
printf ("%c", chuCaiBiMat);
return 0;
}
Thng th theo nhng g chng ta c hc bn s hiu on code trn yu cu ngi dng
nhp vo mt ch ci 2 ln sau in chng ra 2 ln.
Ok bn chy th n i! Oh, chuyn g ang xy ra vy? Bn nhp mt ch ci, ok, nhng
chng trnh ngng ngay sau khi bn mi nhp ch ci mt ln, cn mt ln nhp na c m,
chng trnh khng yu cu bn nhp tip ch ci tip theo. Ti sao vy, sao n li b qua
ch ci th 2 trong khi on code trn r rng dng hm scanf 2 ln yu cu nhp ch ci 2
ln c m.

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

V vy khi bn nhp k t u tin (VD: k t A) v bn bn ENTER, k t A ny c tr v


bi hm scanf u tin, sau scanf tip tc tr v k t c bit \n tng ng vi phm
ENTER m bn bm.
trnh tnh trng ny, tt hn ht l hy to mt hm (function) ca chng ta docKytu( ):
C code:
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
}
Hm ny s dng getchar ( ) y l mt hm c bn c cha trong th vin stdio cng nh scanf
(%c &kytu);
Hm getchar s c d liu c nhp vo, ch mt k t ti mt thi im t bn phm.
Khi s dng hm ny, cc k t nm trong vng m cho n khi ngi dng nhn phm xung
dng. V vy n s i cho n khi phm Enter c g. Hm getchar( ) khng c tham s,
nhng vn phi c cc cp du ngoc n. N n gin l ly v k t tip theo v sn sng a
ra cho chng trnh. Chng ta ni rng hm ny tr v mt gi tr c kiu char.
Sau , chng ta s dng mt hm tiu chun m bn cha c c hi c hc nhng bi
trc: hm toupper ( ) gip vit hoa k t. Bng cch , tr chi vn s hot ng d cho ngi
chi c nhp vo mt k t khng vit hoa. Chng ta s phi khai bo th vin #include ctype.h
u c th s dng hm ny (ng qun nh).
V by gi l phn th v nht: Chng ta s xa i tt c nhng k t m ngi dng nhp
lm trng b nh. Vic gi hm getchar s ly mt k t tip theo nh ti gii thch cho bn
trn. Gi s khi ngi dng nhn Enter th k t m hm ly vo s l \n.
Nhng g chng ta phi lm v cng n gin: ch cn mt dng, chng ta gi hm getchar trong
vng lp cho ti khi gp k t \n th ngng vng lp. Sau khi vng lp kt thc, n c ti k
t \n khi ngi dng nhn Enter, iu cng c ngha l hm getchar c ht nhng k t
c ngi dng nhp vo trc , nh vng m c lm trng theo ng phng
thc hot ng ca hm getchar m ti ni vi bn trn.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 142 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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"

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 143 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nu chng ta lm nh trn, d nhin l tt c cc t b mt ca ngi chi s ging nh nhau, v


ch c g vui c ng khng. Ti yu cu bn lm vy lc u ch gip bn trnh gp phi
nhng vn rc ri thi (ch vo thi im thi nh). Sau khi bn chc rng tr chi hot
ng ng nh bn mun, chng ta c th thoi mi ci tin n sang giai on hai: chng ta
s to ra c mt danh mc y nhng t b mt khc nhau.
Ci g gi l danh mc cc t b mt?
N chnh xc l mt tp tin cha rt nhiu t b mt cho tr Ngi treo c ca bn. V chc
chn l mi t s nm trn 1 dng. VD nh sau:
LOVE
MONEY
PROGRAM
FUNCTION
POINTER
LOOP
INSTRUCTION
STRING
VARIABLE
CONSTANT
DEFINE
Mi ln tr chi bt u, chng trnh ca bn s m tp tin ny ln v chn ngu nhin mt t
trong danh sch. Bng cch ny, bn s c mt tp tin ring bit c th chnh sa theo bn
mun v thm vo nhng t b mt mi cho tr Ngi treo c thm th v.
C th bn nhn ra rng t u n gi nhng t b mt trong tr chi u c ti vit
hoa ton b. Chng ta s khng phn bit gia nhng k t vit hoa v vit thng, vy nn tt
nht l nn ni r ngay t u tt c cc t s c vit hoa. Bn c th thng bo trc cho
ngi chi phn hng dn, yu cu h nhp k t vit hoa ch khng phi ch thng.\
Hn na, chng ta cng b qua nhng trng hp t c du n gin ha tr chi (nu
chng trnh test ca chng ta c nhng t c du nh vy th ti gi ny n vn cha xong
u). Bn s cn phi vit nhng t b mt vo tp tin danh mc t b mt v chng phi c
vit hoa khng du.
C mt vn l my tnh s hi bn, c bao nhiu t b mt trong danh mc. Tht vy, nu bn
mun chn ngu nhin mt t, s c rt nhiu la chn gia t mang s th t 0 vi mt s th
t ngu nhin bt k, v my tnh lm sao bit s bt k l bao nhiu.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 144 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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 !!!

Gii php th 1: M s tr chi


Khi bn ang c nhng dng ny, c th l bn hon tt chng trnh hoc cng c th l
khng.
Bn thn ti mt nhiu thi gian hn mnh ngh bin tr chi ny trng c v kh ngu
ngc. N thng l nh vy: nhn qua th ta thng ngh ui xi, d t nhng thc t th c mt
s trng hp kh phc tp cn phi gii quyt.
Nhng ti ni ri, bn vn c th t mnh gii quyt c ht, ch l mt t nhiu thi gian
hn thi. y u phi l mt cuc chy ua, bn c thoi mi ra, dnh thm cht thi gian suy
ngh trc khi tm n phn gii php ny, th suy ngh thm 5 pht na xem sao, bit u li
ny ra c tng g .
ng c ngh rng ti ch vic t t xung mt cht l vit xong chng trnh. Ti cng nh
cc bn thi, cng phi bt u t nhng g n gin nht v ci tin chng t t c c kt
qu cui cng nh mnh mun.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 145 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 146 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 147 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

V d, nu n mt lc ngi chi tm c n *A*E*OO* th lc ny mng ca chng ta s c


cc gi tr thnh phn l 01010110 (gi tr 1 cho mi k t tm ng).
Kh d bit khi no th chng ta thng tr chi ng khng. l lc cc gi tr Bolean ch
ton l gi tr 1. Ngc li nu on sai th gi tr s l 0.
Ok, tip tc thi:
C code:
printf ("Chao mung den voi tro choi Nguoi treo co !\n\n ");
n gin ch l mt li cho mng thi m. Hihihi. Nhng vng lp sau y mi l iu th v:
C code:
while (soluotDoan > 0 && !win (sokytuBimat))
{
Tr chi s tip tc nu soluotDoan vn ln hn 0 hoc cha thng. Nu khng cn lt on
no hoc chin thng tr chi, trong c 2 trng hp ny, ngng tr chi ngay lp tc, v vng
lp cng s c kt thc.
win l mt function c phn tch da vo mng sokytuBimat. N tr v gi tr true tng
ng vi gi tr 1 nu ngi chi chin thng (mng sokytuBimat ch cha ton gi tr 1), false
tng ng gi tr 0 nu ngi chi thua.
Ti khng th gii thch chi tit cho bn v function win ngay by gi nhng chng ta s ni v
n sau t pht na. By gi bn tm thi ch cn bit chc nng m n s lm trong chng trnh.
Xem th nh:
C code:
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 < 6 ; 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
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 148 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Phn tch on code trn, chng trnh s hin th tng k t tm c v phn cn li ca t b


mt (phn ny c n i bi nhng du *). Mi khi vng lp kt thc, mn hnh s hin th
nhng k t cha c tm thy bng du * v ng thi phn tch xem k t c ngi chi
on c cha trong mng sokytuBimat hay khng (da vo (if sokytuBimat [i])).Nu k t c
tm thy c cha trong mng th hin th ln, ngc li th hin th du * n i.
By gi chng ta c nhng th cn hin th ri, hy yu cu ngi chi nhp k t h on
thi:
C code:
printf ("\n Xin moi ban doan mot ky tu: ");
kytu = docKytu( );
Ti gi hm docKytu ( ) ca chng ta. N c cc k t u tin c nhp vo, vit hoa n
ln v lm trng b nh m.
C code:
// Neu ky tu nhap vao khong dung
if (!kiemtraKytu (kytu, tuBimat, sokytuBimat))
{
soluotDoan--; // Giam bot mot lan doan cua nguoi choi
}
}
Chng ta kim tra xem k t ngi chi nhp vo c cha trong t b mt khng. on code trn
gi hm kiemtraKytu thc hin iu v t na bn s thy c th hm trng nh th no.
Tm thi by gi nhng g chng ta cn bit l hm ny tr v gi tr true nu k t c nhp
vo c cha trong t b mt, ngc li th tr v gi tr flase.
Cc bn c if ca chng ta bt u bng mt du chm than, iu ny c ngha l khng.
Vy by gi iu kin ca chng ta s c hiu l Nu khng tm thy k t.
V iu g s xy ra? N s gim bt mt lt on ca ngi chi.

Lu rng hm kiemtraKytu cng s t gi tr vo cc trong mng sokytuBimat. N s


t gi tr 1 vo nhng no cha k t ng c tm thy.
Vng lp chnh ca tr chi cn phi ngng li. V vy chng ta s quay li u vng lp v
kim tra xem ngi chi cn lt on no khng v liu rng h thng hay cha.
Khi ra khi vng lp chnh ca tr chi, chng trnh s kim tra xem liu ngi chi thng
hay cha trc khi chng trnh ngng li.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 149 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 150 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Phn tch hm kiemtraKytu:


Hm kiemtraKytu c 2 nhim v chnh:

Tr v mt Boolean ch ra rng k t do ngi dng on c cha trong t b mt hay


khng.
Gi gi tr (vd: gi tr 1) vo cc gi tr ca mng sokytuBimat tng ng vi v tr ca
k t trong mng.

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:

Gi tr Boolean ca bin kytuChinhXac s bng 1, v gi tr 1 s c gi vo v tr tng


ng ca k t trong kytuBimat.
Chng ta cp nht gi tr trong mng sokytuBimat tng ng vi v tr ca k t trong
mng.

Li ch ca k thut ny l chng ta s kim tra mt lt ton b cc gi tr trong mng (ch


khng ngng li ngay sau khi tm c k t u tin). Vic ny cho php chng ta cp nht
chnh xc cc gi tr trong mng sokytuBimat, k c trong trng hp c 2 k t ging nhau
trong mt t nh 2 k t O trong t FACEBOOK.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 151 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Gii php 2: Qun l tp tin danh mc t b mt


Chng ta c bit to ra hu ht cc chc nng c bn ca tr chi, v cc bn c th qun
l chng trnh ca mnh nhng vn cn mt phn cha hon thin, l cch chn ngu nhin
mt t b mt trong danh mc t b mt. Bn c th tng tng danh mc n ging nh ti
cho bn xem trn, ti khng cho bn thy c th ton b ni dung tp tin y c v
c th n di ti vi trang giy ch khng t u.
Trc khi tip tc, vic u tin cn lm l to ra mt danh mc t b mt cho tr chi. thi
im ny. d n ngn hay di khng quan trng, ch l lm th nghim cho bi hc ny thi.
Ti s to mt tp tin danhmuc.txt trong th mc cha project ca ti. V tm thi ni dung tp
tin s trng nh sau:
LOVE
MONEY
PROGRAM
FUNCTION
POINTER
LOOP
INSTRUCTION
STRING
VARIABLE
CONSTANT
DEFINE
Sau khi hon thnh chng trnh, d nhin ti s c th quay li danh mc trn v thm vo tp
tin nhng t b mt khc tng thm s phong ph cho tr chi.
Nhng chun b cho mt tp tin mi.
Ring t danh mc trong tn ca tp tin ny cng lm bn tng tng ra mt danh sch c
di gn nh v hn ng khng. Do , ti s thm mt tp tin mi vo project ca mnh, n
l tp tin danhmuc.c (tp tin ny c nhim v c danhmuc.txt). V i vi qu trnh ny, ti s
to mt tp tin danhmuc.h, tp tin ny s cha nhng prototype ca danhmuc.c.
Trong danhmuc.c ti s thm vo cc th vin cn thit v d nhin l c c danhmuc.h. Nh
thng l vn l nhng th vin chun c u tin trc stdlib, stdio bn cnh , chng ta cn
chn mt s ngu nhin t danh mc, v vy ta s phi thm vo th vin time.h ging nh
tng lm vi chng trnh test ca chng 1 (tr ln hn hay nh hn, bn cn nh ko). V
thm na, ta s s dng hm strlen nn bn phi thm vo string.h na nh:

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 152 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 153 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 154 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Nh bn thy, ti gi mt hm theo kiu ring ca mnh, chn ra t c s th t ngu nhin t 1


n gi tr ca soThuTuCuaTu (tham s ny s c gi vo hm).
y l mt hm n gin m ti t vo file danhmuc.c (ti s cho bn thy r chi tit t na).
N s tr v mt gi tr s (tng ng vi s th t ca dng cha t trong tp tin), gi tr ny
s c gi vo bin soThuTuCuaTuDuocChon.
C code:
// 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 --;
}
By gi th chng ta c c s th t ca t c chn ngu nhin, bng vic gi hm
rewind ( ) chng trnh s bt u c tp tin t u. N s m ln lt tng k t \n trong tp
tin. Ln ny, gi tr ca bin soThuTuCuaTuDuocChon s gim xung. Vd t c chn ngu
nhin l t th 5 trong tp tin, th sau mi vng lp gi tr ny s gim xung cn 4, 3, 2, 1 v 0.
Khi gi tr ca soThuTuCuaTuDuocChon bng 0 th chng ta s thot ra khi vng lp, v lc
ny n khng cn tha mn iu kin bin ny c gi tr ln hn 0 na.
Bn cn phi hiu c ngha ca on code ny, n gip ta c th tm c v tr hin ti ca
du nhy o trong tp tin. iu ny cng khng thc s qu kh hiu nhng bn phi c gng
nhn nhn mi vic mt cch r rng. Hy c ht sc m bo rng bn hiu c nhng g ti
ang ni v ang lm.
By gi chng ta cn mt du nhy ch ra v tr ca t c chn trong tp tin.
Chng ta s gi n con tr tuDuocChon (y l tham s m hm cn) vi fgets c cc t:
C code:
/* 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';
Chng ta yu cu hm fgets khng c c qu 100 k t (cng tng ng vi kch thc ca
mng). Hy nh rng hm fgets s c ton b mt dng bao gm lun k t \n.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 155 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Khi bn khng mun gp k t \n ny cui, c th thay th bng \0, k t ny c tc dng ct


mt chui trc khi gp k t \n.
V n hot ng chng ta lu tr k t b mt ti a ch con tr tuDuocChon.
Chng ta vn cha ng tp tin li, mt gi tr tr v 1 ngng hm li v cho thy rng
chng trnh hot ng tt:
C code:
fclose(danhmuc);
return 1; // Gia tri tra ve = 1, tat ca deu hoat dong tot
}
V ti cng khng c g ni thm v hm chonTu.
Hm tuNgauNhien:
y l hm m ti ha s gii thch cho bn khi ny. N s chn mt s th t ngu nhin v
gi n v:
C code:
int tuNgauNhien(int sothutuLonNhat)
{
srand(time(NULL));
return (rand( ) % sothutuLonNhat);
}
Dng u tin srand(time(NULL)); s gip chng trnh ca bn khng chn trng cc s ngu
nhin, ging nhng g chng ta tng lm vi chng trnh ln hn hay nh hn trong
chng 1.
Dng th 2 s chn ra mt s ngu nhin trong chui gi tr t 0 n gi tr ca bin
sothutuLonNhat.
Tp tin danhmuc.h
Sau y l prototype ca cc function. V mt iu na, bn c cn nh v ngi bo v
#ifndef m ti tng yu cu cc bn nn thm vo tt c nhng tp tin .h ca bn (tham kho
li nhng kin thc ca cc bi hc v prototype v tin x l nh).
C code:
#ifndef DEF_DANHMUC
#define DEF_DANHMUC
int chonTu(char *tuDuocChon);
int tuNgauNhien(int sothutuLonNhat);
#endif
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 156 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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"

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;
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.
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 157 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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);
}

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 158 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Chng ta s lm vi th trong main.c:


By gi tp tin danhmuc.c sn sng, chng ta cng tr li vi main.c thm vo mt s th
cho ph hp.
Vi nhng g lm t u n gi, trc ht chng ta s thm vo file danhmuc.h nu bn
mun s dng cc function ca danhmuc.c. Ngoi ra, chng ta cng s khng qun khai bo
thm th vin string.h bi v chng ta s phi s dng hm strlen:
C code:
#include <string.h>
#include "dico.h"
bt u, vic khai bo cc bin s c mt cht thay i. Bn khng cn khi to mt chui k
t tuBimat bi v chng ta c sn mt mng kiu char cho n (cha sn 100 lun).
Vi mng sokytuBimat, kch thc ca n ph thuc vo di ca t b mt. Bi v chng ta
cha bit c kch thc , nn s c mt con tr c to ra, cng vi malloc chng ta c th
gi con tr n v tr b nh m n s c cp pht.
y l mt vd tuyt vi cho bi hc v cp pht ng ca chng ta trc y: chng ta khng th
no bit trc c kch thc ca mng nu chng trnh cha chy, v vy bt buc bn phi
to ra mt con tr v s dng hm malloc.
Bn khng c qun gii phng b nh cn s dng cho nhng mc ch khc nh. cng
chnh l l do cho s xut hin ca free ( ) cui main.c.
Chng ta s cn mt bin dodaiTu lu tr gi tr th hin s lng k t ca t. Nh bn
thy trong phn u, chng ta gi nh t b mt s c 8 k t (bi v chng ta chn
FACEBOOK lm vd m). Nhng by gi chng ta c th lm vic linh ng vi mi t vi
kch thc ty bin.
V sau y l y tt c nhng bin cn cho chng trnh ca chng ta:
C code:
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 */
int soluotDoan = 10; // So luot doan con lai cua nguoi choi (0 = thua)
int i = 0; // Bien ho tro
int dodaiTu = 0;
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 159 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Trn y ch yu l nhng thay i ban u, by gi chng ta s i su hn mt cht:


C code:
if (!chonTu(tuBimat))
exit(0);
u tin chng ta t hm chonTu vo phn iu kin ca if, hm ny s ly tham s l bin
tuBimat.
V nh ta bit, hm s tr v mt gi tr Boolean (1 hoc 0) cho bit n c c thc hin
thnh cng hay khng. Vai tr ca if l phn tch cc gi tr Boolean c tr v bi hm
chonTu, nu hm KHNG hot ng (hy lu trong if c cha du ! th hin ph nh), th
ngng li tt c bng exit (0).
C code:
dodaiTu = strlen(tuBimat);
Gi tr th hin kch thc ca tuBimat c lu tr trong bin dodaiTu.
C code:
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);
By gi chng ta phi cp pht b nh cho mng sokytuBimat. Kch thc ca mng ny
c cung cp bi gi tr ca bin dodaiTu.
Sau dng if kim tra gi tr ca con tr c bng NULL khng. Trong trng hp nu bng
NULL, chng t vic cp pht b nh tht bi, chng ta s dng chng trnh ngay lp tc
(bng cch gi hm exit (0) )
y l tt c nhng g bn cn chun b cho chng trnh. Su y chng ta cn thay i nt
phn cn li ca main.c thay th tt c cc con s 8 (s th hin di ca t FACEBOOK
m ta gi nh l t b mt lc u bi hc) bng bin dodaiTu. VD:
C code:
for (i = 0 ; i < dodaiTu ; i++)
sokytuBimat[i] = 0;
Ban u, on code trn t gi tr 0 vo cc trong mng sokytuBimat v c th hiu l khng
c no trong mng, dn dn gi tr s tng ln cho n khi no bng vi gi tr ca bin
dodaiTu th ngng li, v cng chnh l kch thc chnh xc cho mng.
Ti cng phi thit k li prototype ca function win thm vo bin dodaiTu. Nu khng cc
hm s khng bit khi no phi dng vng lp.
Dch gi: Mr. Hung
daihung.pham@yahoo.fr

- 160 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

www.siteduzero.com
Tc gi: M@teo21

Sau y l tp tin main.c hon thin:


C code:

/*
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

Ti liu hng dn lp trnh C


Apprenez programmer en C

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

Ti liu hng dn lp trnh C


Apprenez programmer en C

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;

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 163 -

Editor: M0N1M
thaibaminh2512@gmai.com

Ti liu hng dn lp trnh C


Apprenez programmer en C

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.

Hy c gng b thi gian ra hiu bi hc ny v ci tin n ht mc c th nh.


C ln no, ng nn lng.

Dch gi: Mr. Hung


daihung.pham@yahoo.fr

- 164 -

Editor: M0N1M
thaibaminh2512@gmai.com

Vous aimerez peut-être aussi