L'essentiel du langage C

Gérer des erreurs classiques de printf

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Vous allez comprendre les erreurs classiques rencontrées avec printf. Vous allez alors voir leur application sur du code.
06:12

Transcription

Je vais vous montrer les erreurs que l'on peut faire avec la fonction printf notamment pour l'affichage des nombres. Pour cela, descendons dans notre template et nous allons dans Declaration globale des variables Nous avons trois variables de type integer Alors, ici j'ai mis signed int mais il ne sert strictement à rien car je rappelle que dans Code Blocks, toute variable où le mot signed n'apparaît pas est automatiquement promu à signed. Donc, en fait, ce mot peut être mis sous silence hormis si vous voulez vraiment que votre code soit totalement portable mais alors là, il s'agit vraiment de quelque chose d'universel. Tous les compilateurs font la même chose. Si vous ne mettez rien devant, le typage est forcément de type signed. Donc, je les initialise de façon respective à 1250, 1250 et -1250 Puis, je fais la même chose mais là, cette fois-ci, je prends du unsigned et je mets du int Alors, je déclare ça sous le nom de nombre_4 5 et 6 et je les initialise de façon respective à 4000, à 68 milliards et plein de brouettes. et à -45285 Alors, nous allons voir en deux parties. Ici, ce sont des commentaires qui vont vous permettre de pouvoir relire tranquillement après cette vidéo mon explication Une variable de type 'int' dans notre compilateur est promu sur 32 bits, donc c'est-à-dire qu'on est capable de compter de -2 milliards à +2 milliards. Donc, voilà un peu ce qu'il va se passer ici. Nous allons regarder et copier cette petite partie de programme et nous allons voir un peu ce qu'il se passe. Donc, pour cela, je vais descendre ma fenêtre, je fais un rappel de mon programme et nous allons regarder ensemble. Donc le nombre 1 est identique au nombre 2 et sont tous les deux de type signed donc promus automatiquement et nous vérifions bien donc que nous avons nombre_1, nombre_2 qui valent respectivement 1250 tous les deux. 1250 1250 Pas de souci jusque-là. Après, nous avons un affichage du nombre_3 qui est à -1250 Donc vérifions, nous sommes %d donc -1250 Tout se passe normalement. Le nombre 4 est 4000 Alors en effet, le nombre 4 est 4000, il est de type unsigned Donc, là déjà, j'ai fait une erreur parce que j'ai mis %d alors que c'est prévu pour un ensemble des entiers positifs et négatifs donc de type signed. Mais là, j'ai de la chance, c'est 4000, ça rentre dans les valeurs qui sont ici et c'est une erreur qui est juste. Après, j'ai le nombre 5. Alors, le nombre 5, lui est beaucoup trop grand, j'avais dit 65 milliards. Bon bah, vous voyez que là, on a un petit peu, on va dire, dépassé, voire explosé le compteur et donc, ce qui s'est passé, c'est qu'en fait, votre valeur se retrouve à faire plusieurs fois le tour du compteur si je puis dire pour venir se fixer à une valeur qui n'est pas aléatoire mais qui correspond à 65 milliards donc quelque chose qui a tourné avec une amplitude de 4 milliards. Donc, c'est modulo 4 milliards pour 65 milliards. Donc là, vous obtenez n'importe quoi évidemment puisqu'il est trop grand. Et en plus, de surcroît, faites un %d Donc là, tout est fait pour que ça se passe mal parce que je rappelle que le nombre 5 est du type unsigned Donc après, nombre 6, il est toujours de type unsigned Donc je devrais avoir %u et non pas %d et là forcément, il apparaît négatif alors qu'il est déclaré positif bien évidemment puisque là, le typage n'est pas le bon. Donc je vais passer cela maintenant en commentaires et vous montrer la suite. Shift+Ctrl+C pour Commentaire et je vais repasser ici Shift+Ctrl+X et nous voilà de nouveau avec le nombre 6 Donc, regardons un peu après le nombre 6 printf nombre 6, donc je l'affiche en type unsigned, et déclaré positif et il affiche n'importe quoi, évidemment puisque le nombre 6, nous l'avons mis négatif et nous voulons un affichage de type unsigned donc que positif donc forcément, vous obtenez n'importe quoi. Pour que le type de conversion, cette fois, soit correct, retenez deux choses : si vous déclarez un type signed, il faut y mettre un d ; si vous déclarez un type unsigned, il faut mettre un %u. Et là, vous avez un affichage qui est borné et strictement supérieur à 0 ; et là, il peut être supérieur et négatif à 0 Et bien évidemment, faites attention que la valeur que vous pouvez entrer à l'intérieur de votre variable puisse contenir cette valeur. Sinon, vous dépassez et vous faites des tours de compteur comme je vous l'ai un peu expliqué de façon caricaturale. En passant, vous voyez qu'ici, la console Windows, contrairement à Linux, ne prend pas en compte les caractères accentués. Caractere, j'ai bien mis sans accent et là, vous voyez la catastrophe. Caractère une caractúre avec un ú C'est pour ça que depuis le début de cette formation, vous voyez certainement plein de fautes de français si je puis dire mais elles sont voulues puisque c'est à cause de ce problème. Voilà, j'espère avoir été assez clair sur les erreurs à ne pas faire avec le printf

L'essentiel du langage C

Comprenez les concepts de base du langage C. Développez de simples applications en mode console, afin de comprendre les rouages d’un des langages les plus utilisés au monde.

7h51 (98 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :12 janv. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !