Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

L'essentiel du langage C

Créer un programme avec un tableau dynamique

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Mettez en pratique ce que vous avez vu précédemment. Effectuez un petit programme permettant d'obtenir, sous forme d'un tableau dynamique, les acquisitions de l'utilisateur.
08:45

Transcription

Je vais avoir besoin des bibliothèques standards que j'utilise d'habitude. Plus, la bibliothèque None. Donc pour cela, je vais avoir besoin d'une fonction void Buffer() que j'ai décidé cette fois-ci, de mettre devant. C'est un choix là pour dire de varier un petit peu. Et je vais avoir besoin de plusieurs variables. Donc, une pour index_for, une pour retourner la valeur d'une touche de clavier, d'où un char. Et puis, int pour le nombre_clients, je pense que int suffira amplement pour ce genre d'application. Et puis, deux pointeurs, un qui va nous servir pour pointer le numero_client. Et puis, un pour savoir qu'elle est la valeur_achat qu'il a affectué. Comme à l'habitude, nous effectuons une mise à 0 de ces deux pointeurs. Nous avons un programme qu'est déjà assez conséquent et à assez peu de temps pour l'expliquer, donc c'est pour ça que j'ai scindé ce programme en bloque de commentaires, voyez comme ici. Mais, que je vais pas commenter et décommenter comme à l'habitude. Alors tout d'abord, quelque chose de très simple, je demande à l'utilisateur de rentrer le nom du client. J'attends donc une valeur décimale, entière et je vais effectuer un contrôle, cette fois-ci. On ne va pas faire n'importe quoi. Je vais effectuer une boucle while dans laquelle déjà il va voir que nombre_clients supérieur à 0 Sinon, l'utilisateur sera gratifié une nouvelle fois d'un nouveau message. Et en plus de cela, je vais vérifier isalpha() qui s'agit bien d'un chiffre et non pas d'une lettre. Donc, c'est pour ça que j'ai intégré cette fois-ci, la bibliothèque ctype. Dans ce cas, si le nombre est inférieur à 0 et en plus qu'il ne s'agit pas simplement d'un chiffre donc d'une lettre ou d'un caractère spécial. Dans ce cas là, là je rappelle à l'utilisateur que il est quand même nécessaire que le nombre_client soit supérieur à 0 et je répète ma phrase. Effectuez la saisie, s'il vous plait, qu'on puisse sortir. Entre les deux évidemment, je réinitialise nombre_clients puisque s'il y a rentré n'importe quoi ici, déjà je suis avec du n'importe quoi, donc, je remets à 0 avant de le gratifier de ce petit rappel. A partir de là, je récupère le morceau du code que nous avons vu, just avant pour l'allocation dynamique, avec une demande de la part de l'OS, en fait, qui est validé si les pointeurs en retour de malloc sont nuls. J'ai deux allocations qui sont faites, une pour nombre_clients qui est de type int sizeof(int) associées à nombre_clients. Je mets le résultat de ce pointeur à l'intérieur de pointeur_numéro_client et je fais la même chose pour le prix de type float, mais cette fois-ci, sur nombre_clients parce que c'est pas sur le nombre de prix qui m'intéresse, c'est le nombre_clients qui m'ont acheté quelque chose. Voilà en ci concerne la partie en fait, contrôle de l'allocation dynamique de mémoire de la part du système. Et puis enfin, j'effectue une boucle for où je vais entrer tranquilement, à la main en partant de 0 jusque nombre_clients, la valeur donc du prix d'achat effectuée, à l'intéreur du pointeur, avec un index_for. Donc, ce pointeur, lui et l'index_for va s'écaler automatiquement sur nombre_clients parceque c'est une allocation dynamique. J'ai déclaré nulle part, une grandeur en fait, pour pointeur_valeur_achat, parceque c'est une allocation dynamique. Ensuite, je demande à l'utilisateur s'il veut faire une petite récap, pour voir un peu ce qu'il a rentré est valable s'il ne s'est pas trompé. Ensuite, je demande à l'utilisateur s'il veut faire une petite récap, donc en appuiyant sur la touche r. J'attends quoi ? Un caractère, si ce caractère est une touche r, dans ce cas là, je reprends ma boucle for et puis j'imprime. D'abord, index_for qui correspond à l'id du client. Et ensuite, la valeur de l'achat effectuée avec deux chiffres après la virgule d'où le drapeau .2. Et je reprends en fait simplement , mon tableau ici, mais cette fois-ci, non pas en adresse, mais en valeur, on veut le contenu cette fois-ci qui était rentré. Et puis ici, touche sur une autre touche que r, et ben dans ce cas là, c'est terminé, on s'arrête. Et à la fin, évidemment j'effectue la libération de la mémoire donc pour mes deux pointeurs, ceci était un petit peu le cas. Ici, je vais effectuer la compilation de ce programme et puis, je vais pas être trop ambitieux, je vais mettre que deux utilisateurs Donc, je mets 12.3 et puis pour le deuxième je vais mettre 45.6. On a un petit problème, comme même c'est que désirez vous un récapitulatif de ce qui était fait, appuiyez sur la touche 'r'. Et puis, bah par défaut, j'ai juste appuiyé sur rentrer-moi. Suite à l'acquisition du dernier pris qui était rentré. je ne comprends pas ce qui s'est passé. Alors, regardons un petit peu. A paritr de où cela n'a plus fonctionné. En fait, c'est avant que je demande à l'utilisateur s'il veut appuiyer sur la touche 'r' Et bah oui en fait, nous avons un problème avec le dernier scanf, parce que le dernier scanf, en fait, met en buffer le fait que j'ai appuyé sur Entrer. Pour ça, c'est comme si j'avais appuyé sur une autre touche que la valeur 'r'. Pour ça, il va falloir nous débarrasser en fait, du dernier scan effectué qui est la valeur donc, de la touche Entrer En fait, pour vider le buffer de façon générale, c'est très simple. Vous allez créer une variable de type integer que là j'ai nommé c. Et puis vous allez faire while, tant que c = getchar(), donc getchar() c'est-à-dire aller rechercher le dernier caractère ne correspond pas à EOF qui est un mot clé en fait, define dans None et que c n'est pas différente d'une fin d'une chaine de caractères donc \n. Et ben dans ce cas là, je continue, je reste dans ma boucle. Cà, ça va nous permettre de vider le buffer, si ce deux conditions ne sont pas remplies. Regardons ensemble, maintenant, nous avons viderBuffer() du scanf. Et je suis réparti donc pour deux valeurs. Donc, 12.30 et puis 45.90. J'appuie sur Entrer. Et là cette fois-ci, voyez le buffer en fait, a été vidé du fameux caractère spécial qui est Entrer. Bah, c'est pas qu'un caractère spécial mais, qui est une action spéciale. Et là cette fois-ci, j'ai la possibilité d'effectuer une récap ou pas. Bon alors, je vais la demander. On a comme même fait beaucoup d'effort pour y arriver. J'ai ID 0 et puis la valeur de l'achat est bien 12.30 et 45.90 pour le deuxième achat. Donc, ce qu'il faut retenir c'est que vous devez garder l'ossature qui était ici, donc, la demande depuis l'utilisateur, la demande depuis l'OS pour obtenir l'allocation dynamique, avec surtout, ici, des demandes qui doivent être cohérentes au niveau de l'allocation et puis après la completion qui doit se faire en ajoutant la petite fonction qui est viderBuffer() qui permet d'éviter en fait, que l'on puisse chuinter le passage, notamment si vous avez un autre scanf qui vient tout de suite derrière, en fait, parce qu'ici il s'agit que d'une impression sur l'écran. Il faut vider le buffer avant de pouvoir faire l'acquisition d'une nouvelle valeur. Et ne pas oublier donc de libérer l'espace qui vous a été attribué.

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 !