Les constantes sont pratiques. Ils sont statiques. Mais ils sont aussi ennuyeux.
Un programme qui ajoute toujours 5 et 7 fait exactement une chose. Cela ne s’adapte pas. Cela n’interagit pas. Pour rendre le code C réellement utile aux utilisateurs finaux, vous devez arrêter de coder en dur les valeurs et commencer à écouter.
L’outil pour ce travail est « scanf ».
Du codé en dur au dynamique
Dans l’exemple précédent, les variables « a » et « b » étaient probablement initialisées avec des nombres fixes. La logique était rigide. Le résultat était prévisible. Si vous souhaitiez modifier l’ajout, vous deviez modifier le code source, le recompiler et le réexécuter.
Ce n’est pas convivial.
Pour résoudre ce problème, nous devons capturer les entrées de la console. La bibliothèque standard gère à la fois la sortie (printf ) et l’entrée (scanf ). Le passage des constantes aux valeurs définies par l’utilisateur transforme le programme d’une démo de calculatrice en un simple utilitaire.
La syntaxe scanf
Voici le code qui permet de réaliser cela :
La logique est simple. C’est linéaire.
- Le programme demande le premier entier.
scanfattend une entrée.- L’utilisateur saisit un numéro et appuie sur Entrée.
- La valeur est stockée dans « a ».
- Répétez pour « b ».
- Ajoutez-les.
- Imprimez le résultat.
L’esperluette (&) confusion
Le point d’échec le plus courant pour les débutants ici est le symbole « & ».
Regardez cette ligne :
scanf("%d", &a);
Pourquoi y a-t-il une esperluette ? Pourquoi pas simplement scanf("%d", a); ?
Les variables en C ne sont pas que des noms. Ce sont des adresses mémoire. Lorsque vous déclarez « int a », vous réservez une partie de la RAM. scanf ne veut pas la valeur de a car a est actuellement vide (ou contient des déchets). scanf a besoin de l’adresse où il peut écrire la nouvelle valeur.
Le & est l’opérateur “adresse de”. Il donne à scanf l’emplacement en mémoire afin qu’il puisse modifier a directement. Sans cela, vous pointez « scanf » vers un morceau de mémoire aléatoire. Le programme risque de planter ou, pire encore, de corrompre vos données.
Aperçu clé :
printfutilise la valeur.scanfa besoin de l’adresse.
Spécificateurs de format
Vous avez utilisé %d dans printf pour afficher un entier. Vous devez utiliser %d dans scanf pour en lire un.
Leur non-concordance provoque un comportement indéfini. Si vous essayez de lire un entier en utilisant %f (float), les données seront mal interprétées. La disposition de la mémoire d’un flottant est différente de celle d’un entier. scanf écrira les bits bruts d’un float
Comment scanf et printf gèrent les variables en C
La compilation et l’exécution du code sont le point où la théorie rencontre la réalité. Si vous sautez cette étape, vous ne faites que deviner. La fonction scanf fonctionne de manière similaire à printf concernant les chaînes de format, mais elle a des exigences plus strictes en matière de saisie. Vous devez placer l’opérateur d’adresse (& ) avant les variables de type char, int, float et les structures. Sans cela, le programme plante.
Pourquoi scanf nécessite l’opérateur d’adresse
L’esperluette n’est pas facultative. Il indique au compilateur de stocker l’entrée directement dans l’emplacement mémoire de la variable. Si vous l’omettez, vous déclenchez une erreur d’exécution. Vous devriez essayer de le supprimer intentionnellement. Voir l’accident est plus éducatif que lire à ce sujet. Cela montre exactement à quel point le C peut être fragile lorsque les adresses mémoire sont mal gérées.
Comment printf formate la sortie pour les utilisateurs
printf envoie le texte vers la sortie standard. La version la plus simple ressemble à ceci :
Ceci imprime le mot “Bonjour” sans nouvelle ligne. Comparez cela à :
Le \n ajoute un retour chariot. Cela met fin à la ligne. Sans cela, la sortie suivante apparaît sur la même ligne. C’est un petit détail qui ruine la lisibilité s’il est ignoré.
Comment intégrer des variables dans les chaînes printf
Pour afficher la valeur d’une variable, vous utilisez un espace réservé. L’opérateur %d se remplace par la valeur entière de la variable. Considérez cet exemple :
Vous pouvez enchaîner des appels printf séparés pour mélanger du texte et des variables, mais cela est inefficace :
L’approche plus propre intègre l’espace réservé dans la chaîne :
Plusieurs espaces réservés fonctionnent également :
Le nombre d’espaces réservés doit correspondre exactement au nombre de variables. Les types doivent également correspondre. Trois spécificateurs %d nécessitent trois paramètres int dans le même ordre. Des types ou des décomptes incompatibles conduisent à un comportement indéfini.
Quels espaces réservés gèrent différents types C
printf prend en charge les types C standard via des spécificateurs de format spécifiques :
- int utilise
%d - float utilise
%f - char utilise
%c - les chaînes de caractères utilisent
%s
Vous pouvez trouver une documentation détaillée en tapant « man 3 printf » sur une machine UNIX. D’autres compilateurs fournissent des pages de manuel ou des fichiers d’aide similaires.
Erreurs C courantes à éviter
La sensibilité à la casse est stricte. Printf ou PRINTF échouera. Il doit être en minuscule « printf ».
- Oublier le
&dansscanfprovoque des crashs d’exécution. - Le nombre de paramètres incompatibles dans
printfouscanfcorrompt la sortie. - L’utilisation de variables non déclarées entraîne des erreurs de compilation.
Le débogage de ces problèmes revient souvent à vérifier d’abord la syntaxe. Le compilateur vous indiquera généralement exactement où se situe la discordance. Il vous suffit de lire le message d’erreur.































