• Aucun résultat trouvé

Les littéraux

Dans le document La programmation en C++ moderne (Page 41-46)

Contenu masqué n°1

II.4.1. Les littéraux

Que sont les littéraux?Une valeur écrite littéralement dans le code, d’où son nom. Nous avons rencontré un littéral dans le chapitre précédent: "Hello World !". Ce littéral est ce qu’on appelle une chaîne de caractères. Mais ce n’est pas le seule littéral possible en C++.

Examinons tout ça.

II.4.1.1. Les caractères

Nous avons fait connaissance avec les chaînes de caractères lors du chapitre précédent. Les chaînes de caractères ne sont rien d’autre que du texte. On les reconnait parce qu’elles commencent et finissent par des doubles guillemets ".

Entraînez-vous donc à afficher des chaînes de caractères, par exemple un littéral souhaitant une bonne journée.

Contenu masqué n°2

Tous comme les mots de la langue française sont des regroupements de lettres, les chaînes de caractères sont une suite de caractères simples. En C++, un caractère est encadré par des guillemets simples '.

1 #include <iostream>

23 int main() 4 {

5 // Un caractère peut être une lettre.

6 std::cout << 'A' << std::endl;

7 // Ou bien un chiffre.

8 std::cout << '7' << std::endl;

9 // Ou même de la ponctuation.

10 std::cout << '!' << std::endl;

1112 return 0;

13 }

Les chaînes de caractères permettent de regrouper des caractères et nous facilitent ainsi la vie pour écrire du texte.

1 #include <iostream>

23 int main() 4 {

5 // Que c'est fastidieux d'écrire ça !

6 std::cout << 'S' << 'a' << 'l' << 'u' << 't' << ' ' << 't' <<

'o' << 'i' << ' ' << '!' << std::endl;

7 // C'est tellement mieux comme ça.

8 std::cout << "Salut toi !" << std::endl;

9

10 return 0;

11 }

?

J’ai mis plusieurs caractères entre guillemets simples, comme ceci 'abc' et mon code compile. Ça veut dire que ça marche?

Si vous avez essayé de compiler, vous avez remarqué un message en rouge dans la fenêtre de résultat disant warning: multi-character character constant, ainsi qu’un nombre au lieu de nos caractères.

Le warning est un message d’avertissement que le compilateur vous envoie, car il ne sait pas si ce que vous avez fait est une erreur d’inattention ou bien une manœuvre volontaire de votre part. Dans notre cas, la norme C++ n’interdit pas de faire ça, mais ce n’est pas considéré comme une bonne pratique, comme étant du bon code.

!

N’ignorez pas les warnings!

Les warnings sont des messages importants signalant d’éventuels problèmes. Il ne faut surtout pas les ignorer sous prétexte que le code compile!

II.4.1.1.1. Des caractères spéciaux

Il existe quelques caractères qui sont un peu particuliers et, pour les introduire, je vais vous demander d’afficher un message contenant un chemin de dossier Windows (C:\Program Files

(x86) par exemple).

Contenu masqué n°3

Boum ba da boum! Le compilateur vous crache à la figure un message de typewarning: unknown escape sequence: '\P'. Que s’est-il passé?

Il existe en C++ des séries de caractères, appeléesséquences d’échappement, qui commencent toutes par \ et dont la liste complète se trouve ici . Et pour comprendre l’intérêt de ces séquences d’échappement, essayez donc de compiler le code suivant.

1 #include <iostream>

23 int main() 4 {

5 std::cout << "Il m'a demandé " Comment vas-tu ? "" <<

std::endl;

67 return 0;

8 }

Vous devez certainement avoir une erreur proche de celle-ci: 'error: expected ';' before 'Comment'. C’est tout à fait normal. En effet, nous avons vu plus haut que les chaînes de caractères sont délimitées par les doubles guillemets "". Donc tout ce qui est entre cette paire de guillemets est considéré par le compilateur comme faisant partie de la chaîne de caractères.

Dans notre exemple, cela veut dire que Comment vas-tu ? ne fait plus partie de la chaîne.

Donc le compilateur l’interprète comme des instructions C++ et comme il ne les comprend pas, il ne peut pas compiler le programme.

?

Mais quel rapport avec ces fameux caractères commençant par \?

Eh bien, les séquences d’échappement permettent de dire au compilateur «Écoute, ce caractère est spécial, il faut l’afficher et non l’interpréter», ce qui permet d’afficher des doubles guillemets dans une chaîne de caractères par exemple.

1 #include <iostream>

23 int main() 4 {

5 std::cout << "Il m'a demandé \" Comment vas-tu ? \"" <<

std::endl;

6 std::cout << "Dossier principal : C:\\Program Files (x86)" <<

std::endl;

78 return 0;

9 }

De toutes les séquences d’échappement qui existe, les plus utilisées et celles que vous verrez le plus souvent sont les suivantes.

— \' qui permet d’afficher un guillemet simple'.

— \" qui permet d’afficher un guillemet double".

— \n qui permet d’aller à la ligne, comme std::endl.

— \t qui permet de faire une tabulation horizontale.

— \\ qui permet d’afficher un antislash \.

Entraînez-vous donc en affichant un guillemet simple sans échappement, puis avec échappement.

Et faites donc mumuse avec les tabulations et les retours à la ligne.

Contenu masqué n°4

II.4.1.2. Les nombres

Il existe d’autres types de littéraux en C++: les nombres entiers et les nombres à virgule, appelés flottants.

1 std::cout << -1 << std::endl;

2 std::cout << 0 << std::endl;

3 std::cout << 1 << std::endl;

4

5 std::cout << -1.6027 << std::endl;

6 std::cout << 3.14159 << std::endl;

7 std::cout << 2.71828 << std::endl;

On remarque déjà qu’on peut utiliser des nombres négatifs sans aucun problème. Ensuite, dû à l’origine américaine de C++,les flottants s’écrivent avec un point et non une virgule.

Même si l’on se fiche des chiffres après la virgule, il faut mettre le point.sinon C++ interprétera le nombre comme un entier.

Sinon, rien de bien étonnant, ce sont des nombres et on peut faire des opérations dessus.

1 #include <iostream>

2

3 int main() 4 {

5 std::cout << "1 + 2 = " << 1 + 2 << std::endl;

6 std::cout << "1 - 4 = " << 1 - 4 << std::endl;

En fait, la raison est très simple: pour C++, si on fait une opération sur deux nombres entiers, le résultat est un nombre entier. Si l’on veut que le résultat soit un nombre à virgule, il faut qu’au moins un des deux nombres soit un flottant.

Dans le cas de la division, si les deux nombres sont des entiers, on obtient le quotient de la division euclidienne, le reste s’obtenant avec l’opérateur %, appelé modulo(c’est de l’arithmétique ).

Si l’un des deux nombres est un flottant, alors on obtient le résultat de la division réelle, donc un nombre réel.

Également, comme en maths, les calculs respectent la distributivité , l’associativité , la commutativité et la priorité des opérateurs . L’exemple suivant est tiré du cours de

@gbdivers.

1 #include <iostream>

2

3 int main() 4 {

5 std::cout << "Commutativité :" << std::endl;

6 std::cout << "2 + 3 = " << 2 + 3 << std::endl;

7 std::cout << "3 + 2 = " << 3 + 2 << std::endl;

8

9 std::cout << "Associativité :" << std::endl;

10 std::cout << "2 + (3 + 4) = " << 2 + (3 + 4) << std::endl;

11 std::cout << "(2 + 3) + 4 = " << (2 + 3) + 4 << std::endl;

1213 std::cout << "Distributivité :" << std::endl;

14 std::cout << "2 * (4 + 3) = " << 2 * (4 + 3) << std::endl;

15 std::cout << "2 * 4 + 2 * 3 = " << 2 * 4 + 2 * 3 << std::endl;

1617 std::cout << "Priorité des opérateurs :" << std::endl;

18 std::cout << "2 * 6 + 3 = " << 2 * 6 + 3 << std::endl;

19 std::cout << "2 * (6 + 3) = " << 2 * (6 + 3) << std::endl;

20 std::cout << "2 * 4 - 6 / 2 = " << 2 * 4 - 6 / 2 << std::endl;

2122 return 0;

23 }

Nous nous sommes amusés avec les littéraux, mais on est quand même rapidement limité.

Imaginons que nous voulions multiplier le résultat précédent par 2 et ce, trois fois. Nous sommes obligés d’écrire un code comme ceci.

1 #include <iostream>

23 int main() 4 {

5 std::cout << "1 * 2 = " << 1 * 2 << std::endl;

6 std::cout << "1 * 2 * 2 = " << 1 * 2 * 2 << std::endl;

7 std::cout << "1 * 2 * 2 * 2 = " << 1 * 2 * 2 * 2 << std::endl;

89 return 0;

10 }

Maintenant, imaginons qu’on ne multiplie plus par 2 mais par 4, et non plus trois fois mais cinq.

Vous visualisez bien tous les changements à faire? C’est pénible, n’est-ce pas? N’y a-t-il pas un moyen de se souvenir de valeurs et de calculs?

Dans le document La programmation en C++ moderne (Page 41-46)