Afficher et lire : printf et scanf
La structure d'un programme C, l'affichage avec printf et la lecture des données avec scanf.
Ce que tu vas apprendre
- Comprendre la structure minimale d'un programme C
- Afficher du texte et des valeurs avec
printf - Lire un entier ou un mot avec
scanf
La structure d'un programme
Un programme C commence toujours son exécution dans la fonction main. La ligne #include <stdio.h> donne accès aux fonctions d'entrée et de sortie, comme printf et scanf.
Chaque instruction se termine par un point-virgule ;. Les accolades { } regroupent les instructions d'un bloc. return 0; signale que le programme s'est terminé normalement.
Afficher avec printf
printf affiche un texte appelé chaîne de format. Dans ce texte, \n passe à la ligne, et chaque spécificateur commençant par % est remplacé par une valeur donnée après la virgule, dans l'ordre :
%d: un entier (int)%c: un caractère (char)%s: une chaîne de caractères (un mot)%f: un nombre réel (double) ;%.2fl'affiche avec deux décimales
Lire avec scanf
Une variable est une case de la mémoire qui a un nom et un type. int n; réserve la place d'un entier nommé n.
scanf("%d", &n); lit un entier et le range dans n. Le & donne l'adresse de la variable : scanf a besoin de savoir où écrire.
Pour lire un mot, on utilise un tableau de caractères : char mot[100]; puis scanf("%99s", mot);. Pas de & ici : le nom d'un tableau est déjà une adresse. Le 99 empêche d'écrire plus de caractères que le tableau ne peut en contenir (il faut garder une place pour la fin de chaîne).
Comment les exercices sont corrigés
Les données de chaque test sont envoyées sur l'entrée standard, comme si quelqu'un les tapait au clavier. Ton programme doit afficher exactement la sortie attendue.
N'affiche donc pas de message du type « Entrez un nombre : » : ce texte en trop ferait échouer le test. Les espaces en fin de ligne et les lignes vides finales sont ignorés.
Exemples commentés
1.Un premier programme
#include <stdio.h>
int main(void) {
printf("Bonjour !\n"); // \n : retour à la ligne
return 0; // 0 : tout s'est bien passé
}Sortie
Bonjour !
Le programme le plus court qui affiche quelque chose. Sans \n, le curseur resterait au bout de la ligne.
2.Lire un entier et le réutiliser
#include <stdio.h>
int main(void) {
int age; // une case pour un entier
scanf("%d", &age); // & : l'adresse de la case
printf("Dans 10 ans, tu auras %d ans.\n", age + 10);
return 0;
}Entrée
17
Sortie
Dans 10 ans, tu auras 27 ans.
La valeur lue est rangée dans age. Dans printf, %d est remplacé par le résultat de age + 10.
3.Lire un mot
#include <stdio.h>
int main(void) {
char ville[50]; // jusqu'à 49 lettres + la fin de chaîne
scanf("%49s", ville); // pas de & : ville est déjà une adresse
printf("Bienvenue à %s !\n", ville);
return 0;
}Entrée
Lyon
Sortie
Bienvenue à Lyon !
%s lit un mot : la lecture s'arrête au premier espace ou retour à la ligne.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Oublier le & dans scanf
À éviter
scanf("%d", n);À préférer
scanf("%d", &n);Sans &, scanf reçoit la valeur de n au lieu de son adresse : le programme lit n'importe où et peut planter. gcc l'avertit grâce à -Wall.
Afficher des messages en trop
À éviter
printf("Entrez un nombre : ");
scanf("%d", &n);À préférer
scanf("%d", &n);Le correcteur compare toute la sortie : un message d'invite ajoute du texte qui n'est pas attendu.
Oublier le point-virgule
À éviter
printf("Salut\n")
return 0;À préférer
printf("Salut\n");
return 0;gcc signale souvent l'erreur sur la ligne suivante (« expected ';' before 'return' ») : pense à regarder la fin de la ligne précédente.
Entraîne-toi
6 questions variées pour fixer la leçon : choix, résultat à prévoir, ligne à compléter, code à remettre dans l'ordre, erreur à trouver.
À toi de jouer !
2 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.