Bonsoir,
Pour m'entraîner un peu en C (il paraît que c'est en pratiquant qu'on apprend) j'ai essayé de créer une fonction lisant les caractères saisis aux claviers et les copiant dans une chaine prévue à cet effet. Je sais bien qu'il existe des fonctions pour ça, je crée celle-ci uniquement pour m'entraîner.
Elle comprend deux paramètres : la chaîne cible (où on va écrire) et sa taille (pour éviter de déborder).
Le but de la fonction est uniquement de saisir une chaîne de caractères, je ne m'intéresse pas pour l'instant à convertir la chaine saisie en entier ou en flottant.
Voici le code :
Je l'ai testé avec ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 // lire_chaine.c #include <stdlib.h> #include <stdio.h> #include "lire_chaine.h" /* lireChaine Lit une chaine de caractères. Retourne EXIT_SUCCESS si tout se passe bien Retourne EXIT_FAILURE si la taille de la chaine saisie est supérieure à celle de la chaine cible. Paramètre 1 : la chaine cible Paramètre 2 : la taille de cette chaine */ int lireChaine(char* chaine, long taille) { char buffer[300] = {0}; // Le buffer qui va recevoir la chaine tappée char caractereLu = 0; // La variable qui reçoit les caractères un a un long i = 0; // Pour les boucles /* Tant qu'on a pas entré de retour à la ligne et tant qu'on ne dépasse pas la taille de la chaine dans laquelle on veut écrire, on continue de recevoir les caractères entrants */ while ((caractereLu = getchar()) != '\n' && i <= taille) { buffer[i] = caractereLu; i++; } /* Si la taille de la chaine dans laquelle on veut écrire a été dépassée, on écrit une erreur et on retourne un échec */ if (i-1 >= taille) { fprintf(stderr, "Erreur : la taille de la chaine saisie depasse celle de la chaine cible.\n"); return EXIT_FAILURE; } /* Si on a pas dépassé la taille de la chaine dans laquelle on veut écrire, on ajoute le caractere NULL au buffer et on copie vers la chaine */ buffer[i] = '\0'; strcpy(chaine, buffer); /* Tout s'est bien passé, on retourne EXIT_SUCCESS */ return EXIT_SUCCESS; }
Ce qui me donne à l'écran :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 // main.c #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char chaine[20] = {0}; printf("Entrez une chaine : "); fflush(stdout); if (lireChaine(chaine, 20) == EXIT_SUCCESS) { printf("La chaine est : \"%s\" et contient %d caracteres", chaine, strlen(chaine)); } return EXIT_SUCCESS; }
Donc apparament, elle fonctionne bien.Entrez une chaine : Chaine de test
La chaine est : "Chaine de test" et contient 14 caracteres
Pourriez-vous m'indiquer si la fonction que j'ai créée a des défauts ?
Si oui, lesquels ?
Comment pourrais-je l'améliorer ?
Par avance, merci.
Partager