Objectifs d'apprentissage
Ce guide couvre les aspects fondamentaux du langage C pour les types de données, les variables et les opérations d'entrée-sortie. Vous apprendrez à définir des variables, utiliser les types de données courants, formater la sortie avec printf, lire l'entrée avec scanf, et comprendre la relation entre les caractères et le code ASCII, le tout dans l'environnement Visual Studio 2022.
Les variables : définition et utilité
Une variable est un espace mémoire nommé utilisé pour stocker des données qui peuvent changer pendant l'exécution du programme. Par exemple, pour enregistrer un numéro de port réseau, calculer des valeurs ou stocker des entrées utilisateur.
Format de définition d'une variable
type_nom variable;
type_nom variable = valeur_initiale;
Règles de nommage (obligatoires)
- Composée uniquement de lettres, chiffres et underscores.
- Ne peut pas commencer par un chiffre.
- Sensible à la casse.
- Éviter les mots-clés réservés comme
int,char,return. - Utiliser des noms significatifs, par exemple
portReseau,compteur,adresseIP.
Types de données fondamentaux en C
Types entiers
| Type | Description | Taille (octets) | Plage approximative |
|---|---|---|---|
char |
Caractère ou petit entier | 1 | -128 à 127 |
short |
Entier court | 2 | -32768 à 32767 |
int |
Entier standard (le plus courant) | 4 | -2 147 483 648 à 2 147 483 647 |
long |
Entier long | 4 ou 8 | Plage étendue |
long long |
Entier très long | 8 | Plage très étendue |
En contexte réseau, les champs comme les numéros de protocole ou les ports sont souvent stockés avec int ou unsigned int.
Types à virgule flottante
| Type | Description | Taille (octets) | Précision |
|---|---|---|---|
float |
Simple précision | 4 | 6 à 7 chiffres significatifs |
double |
Double précision | 8 | 15 à 16 chiffres significatifs |
Types caractère
Le type char est en réalité un entier d'un octet, utilisé pour stocker des caractères selon la table ASCII. Les caractères sont délimités par des apostrophes, par exemple 'X' ou '\n'.
Sortie formatée avec printf
La fonction printf permet d'afficher des données formatées. Les spécificateurs de format doivent correspondre aux types de données.
Spécificateurs courants
%dpourint%cpourchar%fpourfloatetdouble%upour les entiers non signés%xpour l'affichage hexadécimal (souvent utilisé en réseau)%spour les chaînes de caractères
Exemple de code
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int portReseau = 443;
char lettreInitiale = 'B';
double debitConnexion = 99.9;
printf("Port réseau : %d\n", portReseau);
printf("Lettre : %c\n", lettreInitiale);
printf("Débit : %.2f Mbps\n", debitConnexion);
return 0;
}
Ici, %.2f spécifie l'affichage avec deux décimales, utile pour les calculs réseau comme les mesures de débit.
Entrée utilisateur avec scanf
La fonction scanf lit les données saisies au clavier et les stocke dans des variables.
Format de base
scanf("spécificateur", &variable);
Il est essentiel d'utiliser l'opérateur & pour obtenir l'adresse de la variable ; sinon, le programme risque de planter.
Exemple complet
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int premierNombre, deuxiemeNombre;
printf("Entrez deux nombres entiers : ");
scanf("%d %d", &premierNombre, &deuxiemeNombre);
printf("Somme : %d\n", premierNombre + deuxiemeNombre);
return 0;
}
Problèmes courants avec Visual Studio 2022
- L'avertissement
scanf unsafepeut être résolu en ajoutant#define _CRT_SECURE_NO_WARNINGS 1au début du fichier. - Si le programme ferme immédiatement après l'exécution, utilisez
Ctrl + F5pour l'exécuter sans débogage. - Assurez-vous que les types d'entrée correspondent aux spécificateurs pour éviter des comportements inattendus.
Caractères et table ASCII
En interne, les caractères char sont stockés sous forme de valeurs numériques selon la table ASCII. Par exemple :
char symbole = 'A';
printf("Caractère : %c\n", symbole);
printf("Code ASCII : %d\n", symbole); // Affiche 65
En réseau, les données des trames Ethernet ou les indicateurs de protocole TCP/IP sont souvent représentés en hexadécimal ou comme valeurs ASCII.
Cas pratique : calcul de la longueur du masque de sous-réseau
Voici un exemple intégrant les concepts précédents pour calculer le nombre d'hôtes disponibles à partir d'un préfixe de masque.
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int prefixeMasque;
printf("Entrez le préfixe du masque de sous-réseau : ");
scanf("%d", &prefixeMasque);
printf("Préfixe configuré : /%d\n", prefixeMasque);
printf("Nombre d'hôtes disponibles approximatif : 2^%d - 2\n", 32 - prefixeMasque);
return 0;
}
Ce programme illustre l'utilisation des variables entières, de printf et scanf dans un cotnexte réseau.