Bon comme certains ont un peu galéré avec un exercice aujourd'hui en C, je propose une petite correction de cette exercice.
En gros, l'utilisateur entre une chaîne de caractères et le programme doit retourner le nombre de "e" et le nombre de " " (espace).
Voici comment j'ai fait (sûrement pas la meilleure des solutions...) :
- Code:
-
#include<stdio.h>
#include<conio.h>
int main()
{
char c;
int res = 0;
puts("Entrez une chaine de caracteres :");
scanf("%c", &c);
while(c!=10){
if (c==101 || c==32){
res += 1;
}
scanf("%c", &c);
}
printf("Il y a %i caractere(s)!", res);
printf("\nAppuyer sur une touche pour fermer...");
getch();
return 0;
}
Explication :
1/
- Code:
-
char c;
int res = 0;
puts("Entrez une chaine de caracteres :");
scanf("%c", &c);
On a pas encore appris à utiliser les strings (blague à part xD), donc ce qu'on peut seulement faire, c'est utiliser le type char et les propriétés du tampon.
scanf("%c", &c) va seulement prendre le premier caractère saisie!
Par exemple, si on entre:
salut, c'est moi!
La variable c vaudra "s" et les autres caractères iront dans le tampon pour une utilisation ultérieure, c'est-à-dire que le tampon contient encore "alut, c'est moi!".
Si on fait un autre scanf("%c", &d) juste après ça, la variable d vaudra le premier caractère du tampon, c'est-à-dire d="a" et ainsi de suite!
2/
- Code:
-
while(c!=10){
La fameuse boucle "Tant que..." sera très utile, puisqu'on ne sait pas le nombre de caractère que l'utilisateur va entrer. On sait seulement qu'à un moment, il va appuyer sur "Entrée". Et quand on appuie sur "entrée", on utilise un caractère aussi! C'est le saut de ligne (LF)! 10 est le code ASCII du saut de ligne.
Comprenez donc : "Tant que le caractère "saut de ligne" n'apparaît pas (!=), on continue..."
Remarque: on n'écrit pas while(c!="10") car, d'abord, c est de type de char ("10" étant deux char donc une chaîne de caractères) et puis, ça revaudrait à rechercher si il est écrit "10" dans la variable c.
3/
- Code:
-
while(c!=10){
if (c==101 || c==32){
res += 1;
}
scanf("%c", &c);
}
On continue en code ASCII car bizarrement, on dirait que la variable c a été convertie pendant la boucle...
Enfin bref, le code ASCII de "e" c'est 101 et le code de " " c'est 32. Donc si c vaut "e" ou " ", on incrémente le résultat (puisque le but c'est de compter)
scanf("%c", &c) va rechercher le caractère suivant dans le tampon (et l'ancienne valeur de c sera effacé) et on recommence jusque le saut de ligne!