background preloader

Partie I

Facebook Twitter

Apprenez à programmer en C ! Un monde de variables. Une bête de calcul. Les conditions. Les boucles. Les fonctions. Nous avons vu dans les tout premiers chapitres qu'un programme en C commençait par une fonction appelée main . Je vous avais même fait un schéma récapitulatif, pour vous rappeler quelques mots de vocabulaire (fig. suivante).

En haut, on y trouve les directives de préprocesseur (un nom barbare sur lequel on reviendra d'ailleurs). Ces directives sont faciles à identifier : elles commencent par un # et sont généralement mises tout en haut des fichiers sources. Puis en dessous, il y avait ce que j'avais déjà appelé « une fonction ». Ici, sur mon schéma, vous voyez une fonction main (pas trop remplie il faut le reconnaître). Je vous avais dit qu'un programme en langage C commençait par la fonction main . Eh bien, c'est mal d'avoir fait comme ça ? Non ce n'est pas « mal », mais ce n'est pas ce que les programmeurs en C font dans la réalité. Quasiment aucun programme n'est écrit uniquement à l'intérieur des accolades de la fonction main .

Nous allons donc maintenant apprendre à nous organiser. La programmation modulaire. A l'assaut des pointeurs. Jusqu'ici, nous avons uniquement créé des variables faites pour contenir des nombres. Maintenant, nous allons apprendre à créer des variables faites pour contenir des adresses : ce sont justement ce qu'on appelle des pointeurs. Mais… Les adresses sont des nombres aussi, non ? Ça revient à stocker des nombres encore et toujours ! C'est exact. Mais ces nombres auront une signification particulière : ils indiqueront l'adresse d'une autre variable en mémoire.

Créer un pointeur Pour créer une variable de type pointeur, on doit rajouter le symbole * devant le nom de la variable. Code : C - Sélectionner Notez qu'on peut aussi écrire int * monPointeur ; . Comme je vous l'ai appris, il est important d'initialiser dès le début ses variables, en leur donnant la valeur 0 par exemple. Pour initialiser un pointeur, c'est-à-dire lui donner une valeur par défaut, on n'utilise généralement pas le nombre 0 mais le mot-clé NULL (veillez à l'écrire en majuscules) : Là, vous avez un pointeur initialisé à NULL .

Les tableaux. Tableaux, pointeurs et allocation dynamique. Les chaînes de caractères. Le préprocesseur. Le préprocesseur. Créez vos propres types de variables ! Lire et écrire dans des fichiers. Pour lire et écrire dans des fichiers, nous allons nous servir de fonctions situées dans la bibliothèque stdio que nous avons déjà utilisée. Oui, cette bibliothèque-là contient aussi les fonctions printf et scanf que nous connaissons bien !

Mais elle ne contient pas que ça : il y a aussi d'autres fonctions, notamment des fonctions faites pour travailler sur des fichiers. Toutes les bibliothèques que je vous ai fait utiliser jusqu'ici ( stdlib . h , stdio . h , math . h , string . h …) sont ce qu'on appelle des bibliothèques standard. Ce sont des bibliothèques automatiquement livrées avec votre IDE qui ont la particularité de fonctionner sur tous les OS. Vous pouvez donc les utiliser partout, que vous soyez sous Windows, Linux, Mac ou autre. Les bibliothèques standard ne sont pas très nombreuses et ne permettent de faire que des choses très basiques, comme ce que nous avons fait jusqu'ici. Code : C - Sélectionner #include <stdlib.h> #include <stdio.h> Bien.

Fopen : ouverture du fichier . . La saisie de texte sécurisée. Il existe plusieurs fonctions standards en C qui permettent de récupérer une chaîne de texte. Hormis la fonction scanf (trop compliquée pour être étudiée ici), il existe : gets : une fonction qui lit toute une chaîne de caractères, mais très dangereuse car elle ne permet pas de contrôler les buffer overflow ! Fgets : l'équivalent de gets mais en version sécurisée, permettant de contrôler le nombre de caractères écrits en mémoire.

Vous l'aurez compris : bien que ce soit une fonction standard du C, gets est très dangereuse. Tous les programmes qui l'utilisent sont susceptibles d'être victimes de buffer overflow. Nous allons donc voir comment fonctionne fgets et comment on peut l'utiliser en pratique dans nos programmes en remplacement de scanf . La fonction fgets Le prototype de la fonction fgets , situé dans stdio . h , est le suivant : Code : C - Sélectionner char * fgets ( char * str , int num , FILE * stream ); Il est important de bien comprendre ce prototype.

Testons ! Quel est votre nom ? De la fonction scanf. Avant toute chose, l'utilisation de la fonction scanf suppose une bonne connaissance de la mécanique des pointeurs, sur lesquels elle repose. Je ne reviendrai pas sur cette mécanique, de nombreux cours (notamment sur l'Internet) le faisant de manière approfondie.

Ces prérequis constituent un des points pour lesquels la fonction scanf ne doit pas être présentée trop tôt aux débutants, qui maîtrisent mal les pointeurs, sources de "segmentation fault" bien connus des développeurs C... ;-) L'article suivant a été écrit dans le but de démythifier la fonction scanf (et, à travers elle, les fonctions *scanf). Cette fonction, simple à appréhender dans ses services rendus, est en effet une des premières fonctions de saisie présentée aux débutants. Etudions les paramètres utilisés par scanf lors de son appel : #include <stdio.h> int scanf ( const char *format, Exemple : Utilisation de fscanf (qui a exactement le même comportement que la fonction scanf) pour l'analyse d'un fichier de configuration.

L'allocation dynamique. TP : Réalisation d'un pendu. Allocation dynamique en C - complément - Minefield. La v?rit? sur les tableaux et pointeurs en C. Profil du membre : nyco240594 (solution des exercices sur les tableaux) Introduction à la programmation en ANSI-C. Cours de C/C++ Le C/C++ est un langage procédural, du même type que le Pascal par exemple. Cela signifie que les instructions sont exécutées linéairement et regroupées en blocs : les fonctions et les procédures (les procédures n'existent pas en C/C++, ce sont des fonctions qui ne retournent pas de valeur).

Tout programme a pour but d'effectuer des opérations sur des données. La structure fondamentale est donc la suivante : ENTRÉE DES DONNÉES (clavier, souris, fichier, autres périphériques) | TRAITEMENT DES DONNÉES | SORTIE DES DONNÉES (écran, imprimante, fichier, autres périphériques) Ces diverses étapes peuvent être dispersées dans le programme.

Par exemple, les entrées peuvent se trouver dans le programme même (l'utilisateur n'a dans ce cas pas besoin de les saisir). Pour la plupart des programmes, les données en entrée proviennent du flux d'entrée standard, et les données émises en sortie sont dirigées vers le flux de sortie standard. A=2+3 est donc strictement équivalent à : a=ajoute(2,3) 1.1. 1.2. Les bibliothèques C. Sources C. Les meilleurs cours et tutoriels C.