You are on page 1of 7

Apprendre C++ avec QtCreator Etape 1 : Hello, World!

Centre Informatique pour les Lettres et les Sciences Humaines

1 - Cration d'un projet....................................................................................................................................................................2 2 - e contenu initial du !ic"ier #ain.cpp........................................................................................................................................$ %e &uoi ''a(it-il )..................................................................................................................................................................$ *otion de !onction................................................................................................................................................................$ e' !onction' ''appellent le' une' le' autre', 'au! #ain+,.....................................................................................................$ -.pe' et varia/le'.................................................................................................................................................................0 e corp' d'une !onction peut contenir de' d!inition' de varia/le'......................................................................................0 $ - 1ne con'ole co##e inter!ace utili'ateur....................................................................................................................................2 0 - 1tili'ation de la con'ole..............................................................................................................................................................2 A!!ic"a(e de te3te.................................................................................................................................................................2 4ai'ie de te3te.......................................................................................................................................................................5 2 - A!!ectation..................................................................................................................................................................................6 5 - Corri(er le' !aute' de !rappe.......................................................................................................................................................7 6 - E3ercice......................................................................................................................................................................................7

%ocu#ent du 1$89:811

- ;etrouve< la ver'ion la plu' rcente 'ur "ttp:88'ite'.univ-provence.!r8=cpp

QtCreator 2.$.9 - Qt 0.6.0

Etape 1 : Hello, =orld!

286

Au cour' de cette pre#i>re tape, nou' allon' !aire connai''ance avec un lo(iciel, QtCreator, et ac&urir &uel&ue' notion' l#entaire' d'un lan(a(e de pro(ra##ation, C++. e pro(ra##e &ue nou' allon' crer e't une 'orte de vo.a(e dan' le pa'', dan' la #e'ure o? 'on a'pect et 'on #ode de !onctionne#ent vo&uent plu' l'in!or#ati&ue de' anne' 69-79 &ue le @@AB 'i>cle.

1 - Cration d'un projet

a !enCtre d'accueil de QtCreator +c!. ci-contre, 'e caractri'e par la pr'ence d'un certain no#/re' d'l#ent' &ui re'teront en per#anence D notre di'po'ition lor' de l'utili'ation de ce lo(iciel : - 1ne /arre de #enu tout D !ait cla''i&ue E - 1n /andeau (auc"e et un /andeau in!rieur propo'ant diver' contrFle' &ui per#ettent un acc>' rapide au3 co##ande' le' plu' !r&ue##ent utili'e' E - 1ne <one centrale dont le contenu dpend du t.pe d'activit en cour'. %an' le #enu
<Fichier>, <Nouveau fichier ou projet..>

c"oi'i''e< la co##ande .

e dialo(ue &ui apparaGt alor' propo'e di!!rente' option'. *ou' ne 'ou"aiton' pa' crer un 'i#ple !ic"ier, #ai' un projet co#plet, c'e't D dire un en'e#/le or(ani' de !ic"ier' D partir de'&uel' QtCreator 'era capa/le de (nrer un pro(ra##e. Har#i le' t.pe' de projet' C++ di'poni/le', c"oi'i''e< <Autre projet> <Application Qt4 en console> et cli&ue< 'ur [Choisir] .
%>' &ue nou' auron' un peu avanc dan' notre #aGtri'e du lo(iciel et du lan(a(e, nou' pa''eron' D de' projet' (nrant de' pro(ra##e' pourvu' d'une inter!ace (rap"i&ue +<QtWidget><Application graphi ue Qt>,.

e dialo(ue 'uivant vou' per#et de c"oi'ir un no# et un e#place#ent o? 'era cr le do''ier D l'intrieur du&uel 'eront ran(' le' !ic"ier' con'tituant le projet. 1ne !oi' ce' in!or#ation' !ournie', cli&ue< 'ur le /outon [!uivant >] . e' deu3 !enCtre' 'uivante' +repr'ente' ci-de''ou', ne de#andent aucune intervention de votre part, cli&ue< 'i#ple#ent 'ur le /outon [!uivant] de la pre#i>re pui' 'ur le /outon ["er#iner] de la 'econde .

J-L Pris - 13/09/11

QtCreator 2.$.9 - Qt 0.6.0

Etape 1 : Hello, =orld!

$86

2 - e contenu initial du !ic"ier #ain.cpp


1ne !oi' le projet cr, QtCreator pa''e 'pontan#ent en #ode Edition +le #ode au&uel per#et d'accder le /outon [$dit] &ui !i(ure dan' le /andeau (auc"e,. %an' ce #ode, le lo(iciel propo'e par d!aut une <one de navi(ation &ui per#et de c"oi'ir le !ic"ier 'ur le&uel nou' 'ou"aiton' intervenir. %eu3 c"oi3 nou' 'ont propo'' : un !ic"ier .pro &ui dcrit la !aIon dont notre pro(ra##e va Ctre con'truit et dont nou' n'allon' pa' nou' occuper pour l'in'tant, et le !ic"ier #ain.cpp. %ou/le-cli&ue< 'ur ce dernier pour en !aire apparaGtre le contenu
1 2 3 4 5 6

#include <QtCore/QCoreApplication> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv) return a!e"ec() # En dpit de 'a /ri>vet, le te3te contenu dan' le !ic"ier #ain.cpp appelle de no#/reu3 co##entaire' et il e't !ort po''i/le &ue tout ne vou' 'e#/le pa' clair d>' la pre#i>re 'ance : tout e't nouveau, et il !aut un peu de te#p' et de prati&ue pour ''"a/ituer et dcouvrir &u'il n'. a lD rien de relle#ent co#pli&u. %e &uoi ''a(it-il ) %'un te3te crit en C++ +d'o? le c"oi3 de l'e3ten'ion .cpp pour le no# du !ic"ier, &ui dcrit le' opration' &ue notre pro(ra##e devra e3cuter lor'&ue nou' le #ettron' en route.
Attention D ne pa' con!ondre un te3te en C++ avec le pro(ra##e &u'il per#et de (nrer. %e' traite#ent' co#ple3e' 'ont nce''aire' pour crer e!!ective#ent un pro(ra##e e3cuta/le D partir d'un te3te 'ource rdi( dan' un lan(a(e de pro(ra##ation tel &ue C++. C'e't QtCreator &ui va 'e c"ar(er d'appli&uer ce' traite#ent', #ai' leur 'ucc>' n'e't pa' (aranti : 'i le te3te 'ource ne re'pecte pa' le' r>(le' du lan(a(e, il peut ''avrer i#po''i/le de l'utili'er pour crer un pro(ra##e.

%an' 'on tat actuel, le te3te 'ource co#porte deu3 partie' : une directive d'inclu'ion +li(ne 1, et la d!inition d'une !onction +li(ne' 2 D 6,. *otion de !onction a de'cription de' opration' devant Ctre e!!ectue' par un pro(ra##e peut ''avrer tr>' lon(ue +plu'ieur' #illier' de pa(e', dan' certain' ca',. Hour !aciliter la rdaction et la correction de ce te3te, on pr!>re le 'cinder en unit' d'une taille plu' #aGtri'a/le, un peu co##e on divi'e le te3te d'un ro#an en c"apitre'. En C++, ce' unit' ''appellent de' !onction' et leur d!inition o/it D de' r>(le' tr>' prci'e' : - a d!inition d'une !onction co##ence par un en-tCte +li(ne 2, &ui #entionne le no# de la !onction +l'&uivalent du titre du c"apitre, main dan' le ca' pr'ent, et di!!rente' in!or#ation' au3&uelle' nou' n'allon' pa' nou' intre''er au cour' de cette pre#i>re tape. - 'en-tCte e't 'uivi d'un couple d'accolade' +li(ne' 3 et 6, &ui dli#itent ce &u'on appelle le corp' de la !onction. A l'intrieur de ce corp' +li(ne' 4 et 5, !i(urent le' in'truction' &ui 'pci!ient le' traite#ent' &ui auront lieu lor'&ue la !onction 'era e3cute.
e corp' d'une !onction con'titue un ca' particulier de /loc d'in'truction' : une li'te d'in'truction' dli#ite par un couple d'accolade'.

e' !onction' ''appellent le' une' le' autre', 'au! main() 'intrCt d'une !onction r'ide dan' le traite#ent &ue dcrivent le' in'truction' contenue' dan' 'on corp'. Hour &ue ce traite#ent 'oit e!!ectu, il !aut &ue la !onction 'oit appele, c'e't D dire &u'une in'truction #entionnant le no# de la !onction 'oit e3cute. J? peut donc /ien !i(urer une telle in'truction ) Aucun 'u'pen' : dan' le corp' d'une autre !onction +c'e't le 'eul endroit o? de' in'truction' e3cuta/le' ont le droit de !i(urer,. 4i l'e3cution d'une !onction ne peut Ctre dclenc"e &ue par une autre !onction elle-#C#e en cour' d'e3cution, &ui co##ence )
J-L Pris - 13/09/11

QtCreator 2.$.9 - Qt 0.6.0

Etape 1 : Hello, =orld!

086

Har d!inition, le lance#ent d'un pro(ra##e 'e traduit par l'e3cution de' in'truction' contenue' dan' la !onction main(), &ui jouit donc d'un 'tatut e3ceptionnel : elle n'a pa' /e'oin d'Ctre appele par une de 'e' coll>(ue' pour 'e #ettre au travail.
e 'tatut de main() e't #C#e encore plu' e3ceptionnel &ue Ia : 'on appel e3plicite e't interdit.

a pr'ence d'une !onction main() e't donc indi'pen'a/le pour &u'un te3te 'ource pui''e donner nai''ance D un pro(ra##e. C'e't la rai'on pour la&uelle la cration d'un projet par QtCreator ''acco#pa(ne de la rdaction auto#ati&ue d'une !onction main() #ini#ale. -.pe' et varia/le' e' traite#ent' e!!ectu' par un pro(ra##e ''appli&uent D de' donne' repr'ente' dan' la ##oire de l'ordinateur. En C++, le' notion' de varia/le et de t.pe per#ettent de d!inir le' convention' de coda(e utili'e' pour repr'enter ce' donne', ain'i &ue le' opration' l#entaire' &ui peuvent leur Ctre appli&ue'. Jn peut voir le' varia/le' co##e de' 'orte' de /oGte' : elle' portent un no# +l'&uivalent d'une ti&uette colle 'ur la /oGte et per#ettant de la d'i(ner 'an' a#/i(uKt,, ont un contenu +ce &u'on appellera la valeur de la varia/le, #ai' ne peuvent pa' contenir n'i#porte &uoi +la nature de ce &u'une varia/le peut contenir dpend de 'on t.pe,.
4i une /oGte e't de t.pe Ltui D violonL, il 'era i#po''i/le d'. ran(er un 'a3op"one ou une contre/a''e, 'an' parler d'un porteavion'.

*otre e3ploration du lan(a(e va co##encer par l'u'a(e de varia/le' de di!!rent' t.pe', et nou' devon' d'ore' et djD nou' !aire D l'ide &ue ce' t.pe' 'e rparti''ent en troi' !a#ille' : - e' t.pe' 'tandard 'ont d!ini' une !oi' pour toute' par la nor#e internationale r(i''ant le lan(a(e C++ +A4J8AEC 10772:1::7,. Ce' t.pe' 'ont di'poni/le' &uel &ue 'oit le conte3te et per#ettent de crer de' varia/le' dan' le corp' de n'i#porte &uelle !onction. Al' 'ont 'i#ple' et peu no#/reu3 +troi', !onda#entale#ent, un peu plu' 'i on con'id>re toute' le' variante' o!!erte',. - %'autre' t.pe' ont t cr' par de' pro(ra##eur' utili'ant le lan(a(e C++ et 'ont #i' D votre di'po'ition par l'inter#diaire de li/rairie'. Jn peut 'e repr'enter une li/rairie co##e une collection de !ra(#ent' de pro(ra##e' pr-!a/ri&u', &ui vont nou' per#ettre de #onter no' pro(ra##e' /eaucoup plu' rapide#ent et !acile#ent &ue ''il nou' !allait utili'er uni&ue#ent le' /ri&ue' l#entaire' propo'e' par le lan(a(e lui-#C#e. Hour utili'er un t.pe d!ini dan' une li/rairie, il !aut runir deu3 condition' : la li/rairie en &ue'tion doit Ctre di'poni/le +'ou' la !or#e d'un !ic"ier .li/, au #o#ent o? le pro(ra##e e't (nr ET le !ic"ier dan' le&uel le t.pe va Ctre utili' doit dclarer cette intention +en (nral au #o.en de directive' d'inclu'ion analo(ue' D celle !i(urant 'ur la li(ne 1,. Ce' t.pe' peuvent Ctre tr>' la/or' et 'e co#pter par #illier'. 'u'a(e d'une li/rairie i#pli&ue donc une con'ultation !r&uente de 'a docu#entation. - a troi'i>#e !a#ille re(roupe le' t.pe' &ue vou' d!inire< vou'-#C#e au cour' de l'criture de votre pro(ra##e. eur no#/re et leur niveau d'la/oration ne dpend donc &ue de vou', #ai' leur utili'ation e3i(e vide##ent &u'il' 'oient par!aite#ent d!ini' au #o#ent o? vou' de#andere< D QtCreator de crer un pro(ra##e D partir de votre te3te 'ource. e corp' d'une !onction peut contenir de' d!inition' de varia/le' a li(ne 5 illu'tre la !aIon dont une varia/le e't cre : le corp' d'une !onction contient une li(ne indi&uant un t.pe, un no# et une valeur d'initiali'ation. QCoreApplication a(argc, argv) Al ''a(it ici d'un t.pe d!ini dan' la li/rairie Qt +ce &ui e3i(e la directive d'inclu'ion de la li(ne 1, et la varia/le e't /apti'e a. a co#ple3it du t.pe QCoreApplication ne nou' per#et pa' d'entrer pour l'in'tant dan' le' dtail' de l'initiali'ation de la varia/le a et de l'u'a(e &ui en e't !ait D la li(ne . Avant d'e3plorer plu' avant le' joie' de la cration de varia/le' de t.pe' plu' 'i#ple', vo.on' un peu D &uoi re''e#/le le pro(ra##e dan' 'on tat initial.

$ - 1ne con'ole co##e inter!ace utili'ateur


Hour de#ander D QtCreator de crer un pro(ra##e D partir de' !ic"ier' de notre projet, cli&ue< 'ur le /outon repr'entant un #arteau &ui e't 'itu tout en /a' du /andeau (auc"e . Co##e nou' n'avon' pa' encore touc" au contenu du !ic"ier #ain.cpp, il devrait 'e prCter de /onne (rMce au3 traite#ent' &ui l'attendent et dont le 'ucc>' va 'e traduire par le pa''a(e du t#oin de con'truction D l'tat Lcon'truction ru''ieL +c!. ci-contre,.
4elon la pui''ance de l'ordinateur &ue vou' utili'e< et la co#ple3it du projet concern, le' traite#ent' per#ettant la cration du pro(ra##e peuvent durer plu' ou #oin' lon(te#p'. %an' le ca' pr'ent, une dure de 0 D 2 'econde' peut Ctre con'idre co##e nor#ale.

J-L Pris - 13/09/11

QtCreator 2.$.9 - Qt 0.6.0

Etape 1 : Hello, =orld!

286

1ne !oi' la con'truction ru''ie, vou' pouve< lancer l'e3cution du pro(ra##e en cli&uant 'ur la !l>c"e verte 'itue i##diate#ent au de''ou' du t#oin de con'truction . 'inter!ace utili'ateur de notre pro(ra##e e't une !enCtre cla''i&ue +avec 'a /arre de titre, 'a ca'e de !er#eture ou tou' le' di'po'iti!' nor#au3 propo'' par votre '.'t>#e, &ui 'i#ule un environne#ent de t.pe Lcon'ole te3teL, c'e't D dire un di'po'iti! o? la co##unication entre pro(ra##e et utili'ateur 'e r'u#e D un c"an(e de #e''a(e' crit'. %an' ce t.pe d'inter!ace, le pro(ra##e a!!ic"e un #e''a(e +t.pi&ue#ent, une &ue'tion, et attend &ue l'utili'ateur 'ai'i''e un te3te au clavier et ac">ve 'a 'ai'ie en pre''ant la touc"e [$ntr%e]. e pro(ra##e c"erc"e alor' D e3ploiter le te3te 'ai'i par l'utili'ateur, pui' po'e ventuelle#ent une nouvelle &ue'tion, et ain'i de 'uite.
Ce t.pe d'interaction tait le 'eul connu avant l'apparition de' inter!ace' dite' L(rap"i&ue'L, &ui 'e caractri'ent par l'utili'ation de la 'ouri' et de di'po'iti!' lo(iciel' tel' &ue le' icFne', le' #enu' et le' di!!rent' t.pe' de /outon' &ue vou' connai''e<. %u point de vue de l'criture de' pro(ra##e', ce' deu3 conte3te' di!!>rent radicale#ent. %an' un univer' Lcon'oleL, c'e't le pro(ra##e &ui dcide du droule#ent de' opration' : il po'e 'e' &ue'tion' le' une' apr>' le' autre', dan' un ordre c"oi'i par le pro(ra##eur, et 'era incapa/le d'e3ploiter une 'ai'ie &ui ne corre'pondrait pa' D 'e' attente'. %an' une inter!ace (rap"i&ue, au contraire, c'e't l'utili'ateur &ui a l'initiative et le pro(ra##e doit Ctre conIu pour ra(ir correcte#ent D de' 'ollicitation' &ui lui 'ont adre''e' dan' un ordre i#prvi'i/le.

%an' 'on tat actuel, le pro(ra##e n'a!!ic"e rien et ne 'e prCte D aucune 'ai'ie de la part de 'on utili'ateur. a 'eule c"o'e &ue vou' pui''ie< en !aire, c'e't cli&uer 'ur la ca'e de !er#eture de la !enCtre, ce &ui #et !in D l'e3cution du pro(ra##e .

0 - 1tili'ation de la con'ole
'a!!ic"a(e et la 'ai'ie de te3te dan' une con'ole ne 'ont pa' de' opration' 'upporte' directe#ent par le lan(a(e C++.
Ce lan(a(e n'e't pa' 'pciale#ent de'tin D crer de' pro(ra##e' voluant dan' ce conte3te. a plupart de' pro(ra##e' &ue vou' alle< crire utili'eront une inter!ace (rap"i&ue, et il !aut au''i 'i(naler &ue de no#/reu3 pro(ra##e' crit' en C++ 'ont de'tin' D de' #ac"ine' dpourvue' du couple cran8clavier &ui &uipe le' #icro-ordinateur' actuel'.

A!!ic"a(e de te3te Hour utili'er la con'ole, nou' allon' donc avoir recour' D la li/rairie 'tandard, &ue QtCreator #et D la di'po'ition de no' pro(ra##e' 'an' &ue nou' a.on' autre c"o'e D !aire &ue d'annoncer notre intention d'utili'er certaine' de 'e' !onctionnalit' :
1 2 3 4 5 6 !

#include <QtCore/QCoreApplication> #include <io$tream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv) $td%%cout << &'on(our )& return a!e"ec() # Cette prcaution oratoire tant pri'e +li(ne 2,, nou' 'o##e' en #e'ure de de#ander +li(ne 6, D notre !onction d'a!!ic"er un #e''a(e dan' 'a con'ole. -roi' point' 'ont D 'ouli(ner : - e te3te &ue nou' voulon' voir apparaGtre e't plac entre (uille#et'. - a de#ande d'a!!ic"a(e e't '.#/oli'e par deu3 c"evron' &ui !or#ent une 'orte de !l>c"e. - Cette !l>c"e envoie le te3te en direction de la con'ole, d'i(ne par une appellation &ui peut 'e#/ler un peu /ar/are #ai' &ui o/it D une certaine lo(i&ue : $td%% rappelle &u'il ''a(it d'un di'po'iti! relevant de la li/rairie standard, le c e't 'i#ple#ent l'initiale du #ot Lcon'oleL et le out indi&ue &ue la con'ole e't ici utili'e co##e une 'ortie +le #e''a(e va du pro(ra##e ver' l'utili'ateur, c'e't D dire de l'intrieur de la #ac"ine ver' l'e3trieur,. Ajoute< le' li(ne' 2 et 6 D votre !ic"ier #ain.cpp .

En C++, le' in'truction' e3cuta/le' 'e concluent par un point vir(ule.


Attention au3 !aute' de !rappe. e' deu3 c"evron' con'tituent un #ot du lan(a(e C++, il !aut donc viter de /ri'er ce #ot en lai''ant un e'pace entre eu3...

;econ'trui'e<

, pui' e3cute<

votre pro(ra##e

Nravo ! Co##e de' #illier' d'apprenti' pro(ra##eur' avant vou', vou' vene< de !aire vo' pre#ier' pa' en C++ 'ou' la !or#e d'un LHello, =orld!L a/'olu#ent r(le#entaire +/ien &ue !rancop"one,.

J-L Pris - 13/09/11

QtCreator 2.$.9 - Qt 0.6.0

Etape 1 : Hello, =orld!

586

4ai'ie de te3te ;cuprer un te3te 'ai'i par l'utili'ateur e't une opration un peu plu' co#pli&ue. Jn peut deviner &ue la con'ole va Ctre d'i(ne par $td%%cin +pui'&ue le #e''a(e va #aintenant de l'e3trieur ver' l'intrieur de la #ac"ine, et &u'une !l>c"e co#po'e de deu3 c"evron' va diri(er le te3te provenant de la con'ole ver'... Oer' &uoi, ju'te#ent ) Hour &ue le pro(ra##e 'oit en #e'ure d'utili'er l'in!or#ation par la 'uite, il PA1- &ue celle-ci 'oit 'tocQe en ##oire. Al nou' !aut donc crer une varia/le, c'e't D dire une /oGte 'u'cepti/le de contenir le no# &ue l'utili'ateur va nou' donner. a li/rairie 'tandard o!!re ju'te#ent, 'ou' le no# de $td%%$tring, un t.pe &ui convient par!aite#ent pour 'tocQer de' c"aGne' de caract>re'. Co##e la varia/le doit e3i'ter avant &ue la 'ai'ie ne ''e!!ectue, nou' criron' donc :
1 2 3 4 5 6

int main(int argc, char *argv[]) { QCoreApplication a(argc, argv) $td%%cout << &Comment vou$ appele*+vou$ , & $td%%$tring nom-tili$ateur $td%%cin >> nom-tili$ateur
'e3cution de la li(ne 5 cre une varia/le no##e nom-tili$ateur, de t.pe $td%%$tring. 'e3cution de la li(ne 6 ran(e dan' cette /oGte la '&uence de lettre' &ue l'utili'ateur a tape. Ceci 'i(ni!ie &ue l'e3cution de la li(ne 6 peut durer tr>' lon(te#p' : tant &ue l'utili'ateur n'a pa' pre'' la touc"e [$ntr%e], la 'ai'ie e't en cour' et le pro(ra##e ne peut pa' continuer.

1ne !oi' la 'ai'ie ter#ine, le contenu de la /oGte peut Ctre utili', #C#e 'i nou' n'avon' vide##ent aucune ide du no# de l'utili'ateur au #o#ent o? nou' crivon' le pro(ra##e :
! 9 10 11

$td%%cout << &'on(our, & $td%%cout << nom-tili$ateur $td%%cout << &! .e $ui$ a/$olument ravi de 0aire votre connai$$ance )& return a!e"ec() # e p"no#>ne intre''ant e't illu'tr 'ur la li(ne contenu.
!

: ce n'e't pa' le no# de la varia/le &ui e't a!!ic" 'ur l'cran, #ai' 'on

or'&ue le conte3te ''. prCte, le no# d'une varia/le d'i(ne le contenu de celle-ci. %onne< D votre !onction main() le contenu dcrit ci-de''u' et !aite' con'truire le pro(ra##e Ori!ie< &ue l'e3cution de celui-ci e't con!or#e D vo' attente' . .

e' caract>re' apparai''ent D l'cran D #e'ure &ue vou' le' tape< pour indi&uer votre no#. Al ''a(it lD d'un 'i#ple c"o propo' par la con'ole elle-#C#e, pour vou' per#ettre de 'avoir o? vou' en Cte' et de corri(er une ventuelle erreur. e pro(ra##e, lui, n'aura acc>' D votre 'ai'ie &ue lor'&ue vou' !inire< par pre''er la touc"e [$ntr%e].

2 - A!!ectation
Al arrive vide##ent &ue le contenu d'une varia/le ne dpende pa' +ou pa' 'eule#ent, d'une 'ai'ie e!!ectue par l'utili'ateur. Hour illu'trer cette 'ituation, nou' allon' introduire dan' notre pro(ra##e de' varia/le' d'un t.pe 'tandard : int. Ce' /oGte' peuvent contenir de' valeur' nu#ri&ue' enti>re' ! *otre pro(ra##e va 'i#ple#ent de#ander 'on a(e D l'utili'ateur, pui' utili'er cette in!or#ation pour calculer en &uelle anne celui-ci aura 199 an'.
1 2 3 4 5 6 ! 9 10 11 12 13 14 15

#include <QtCore/QCoreApplication> #include <io$tream> #include <1date> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv) $td%%cout << &Comment vou$ appele*+vou$ , & $td%%$tring nom-tili$ateur $td%%cin >> nom-tili$ateur $td%%cout << &'on(our, & $td%%cout << nom-tili$ateur $td%%cout << &! .e $ui$ a/$olument ravi de 0aire votre connai$$ance )& $td%%cout << &2nQuel age ave*+vou$ , & int ageActuel(3) $td%%cin >> ageActuel
J-L Pris - 13/09/11

QtCreator 2.$.9 - Qt 0.6.0

Etape 1 : Hello, =orld!

686

e' li(ne 13 D 16 n'ont rien de /ien nouveau. ;e#ar&ue< 'i#ple#ent &ue la varia/le ageActuel e't initiali'e avec la valeur 9 +li(ne 14,, une prcaution judicieu'e dan' le ca' de' t.pe' 'tandard.
e' t.pe' !ourni' par le' li/rairie' 'ont (nrale#ent a''e< 'op"i'ti&u' pour &u'une varia/le &ui vient d'Ctre cre n'ait pa' un contenu !antai'i'te. %an' le ca' de' t.pe' 'tandard, #ieu3 vaut prendre 'oin de le' initiali'er e3plicite#ent avec une valeur 'i(ni!icative. Aci, un a(e nul 'i(ni!ie claire#ent &ue l'utili'ateur n'a pa' +encore ), rpondu.
16 1

int anneeActuelle(3) anneeActuelle 4 Q5ate%%current5ate()!6ear() Co##e 'on no# l'indi&ue, la varia/le anneeActuelle e't de'tine D contenir l'anne courante. HlutFt &ue d'indi&uer littrale#ent cette valeur dan' le te3te 'ource +ce &ui conduirait D un pro(ra##e a.ant une date li#ite d'utili'ation,, nou' o/tenon' la valeur correcte (rMce D la li/rairie Qt +en e'prant, vide##ent, &ue l'ordinateur 'ur le&uel le pro(ra##e 'era e3cut aura /ien une date courante e3acte,. Cette utili'ation de la li/rairie Qt e3i(e la pr'ence de la directive d'inclu'ion de la li(ne 3. En plu' du recour' D la li/rairie Qt, la li(ne 1 !ait intervenir une opration d'a!!ectation : le 'i(ne 4 e3i(e &ue la valeur !ournie par Qt 'oit ran(e dan' la varia/le anneeActuelle. or'&u'il !i(ure D (auc"e de l'oprateur d'a!!ectation +le 'i(ne 4,, le no# d'une varia/le d'i(ne la varia/le elle-#C#e, o? il ''a(it de ran(er une nouvelle valeur +en ou/liant l'ancienne,. a !in du pro(ra##e ne devrait co#porter aucune 'urpri'e pour vou', 'i ce n'e't un petit ra!!ine#ent D la li(ne 20, o? deu3 c"o'e' 'ont a!!ic"e' par une #C#e in'truction : un te3te littral +plac entre (uille#et', pui', (rMce D un 'econd dou/le c"evron', la valeur d'une varia/le.

1! 19 20 21 22

int anneeCentenaire(3) anneeCentenaire 4 anneeActuelle 7 833 + ageActuel $td%%cout << &9ou$ $ere* donc centenaire en & << anneeCentenaire return a!e"ec() #
a li(ne 19 proc>de, elle-au''i, D une a!!ectation. a valeur &ui doit Ctre 'tocQe dan' la varia/le anneeCentenaire e't o/tenue par un calcul &ui !ait intervenir une addition +note 7, et une 'ou'traction +note +,. Ce (enre de calcul utili'e vide##ent le' valeur' contenue' dan' le' varia/le' dont le no# e't #entionn + anneeActuelle et ageActuel, dan' cet e3e#ple,.

4i vou' donne< D votre !ic"ier #ain.cpp le contenu dcrit ci-de''u', vou' pourre<, une !oi' li#ine' toute' le' !aute' de !rappe, !aire con'truire votre pro(ra##e et jouer avec .

5 - Corri(er le' !aute' de !rappe


Co##e tou' le' lan(a(e' de pro(ra##ation, C++ e't peu enclin D pardonner le' appro3i#ation'. 1ne 'i#ple erreur de ponctuation, un caract>re o#i' ou une #aju'cule &ui devient #inu'cule 'u!!i'ent D dclenc"er une avalanc"e de prote'tation' de la part de Qt&esigner. RC#e le plu' #ania&ue de' d/utant' pa''e 'on te#p' D !aire de' !aute' de ce (enre, &ui 'ont une 'ource i#portante de !ru'tration. Al n'. a pa' de 'olution #iracle : c'e't 'eule#ent avec l'e3prience &ue vient le privil>(e d'viter le plu' 'ouvent +et de corri(er tr>' !acile#ent, ce' petite' i#per!ection'. Oient alor' le plai'ir de co##ettre de' erreur' /ien plu' (rave' +et plu' di!!icile' D corri(er,, #ai' ceci e't une autre "i'toire... En attendant, le 'eul re#>de vrai#ent e!!icace 'i vou' n'arrive< pa' D trouver ce &ui e#pCc"e la cration de votre pro(ra##e, c'e't de #ontrer votre te3te 'ource D &uel&u'un &ui a de' .eu3 un peu plu' entraGn' : le !oru# e't lD pour Ia !

6 - E3ercice
Cre< un pro(ra##e a!!ic"ant dan' une con'ole le #e''a(e L*ou' 'o##e' en 2911L.
Cet a!!ic"a(e devra Ctre e!!ectu 'an' &ue l'utili'ateur ait D e!!ectuer une &uelcon&ue 'ai'ie. Al va 'an' dire &ue, 'an' &u'il 'oit nce''aire de #odi!ier le te3te 'ource et de recon'truire votre pro(ra##e, celui-ci devrait Ctre capa/le d'a!!ic"er L*ou' 'o##e' en 2912L ''il e't e3cut l'anne proc"aine, pui' L*ou' 'o##e' en 291$L ''il e't e3cut l'anne d'apr>', et ain'i de 'uite.

J-L Pris - 13/09/11