Realiser un programme en c
Bonjour,
j'ai ecris ce programme pour afficher cobien de fois on a ecrit le caractere 'e' et 'E'
mais ça pas entierement marcher
il y a plusieure problemes dedans
est ce qu'il ya qlq1 qui peut m'aider svp
c'est le programme que j'ai ecrit
(((((((
#include <stdio.h>
#include <conio.h>
void main()
{char e[6];
int i=0,j=0,k=0,m=0;
for(i=0;i<1;i++)
{
printf("entrer\n");
scanf("%c",&e[i]);
if(e[i]=='e')
i++;
if(e[i]=='E')
j++;
}
printf(" il y a %d e et %d E ", m,k);
getch();
}
))))
merci d'avance;)
j'ai ecris ce programme pour afficher cobien de fois on a ecrit le caractere 'e' et 'E'
mais ça pas entierement marcher
il y a plusieure problemes dedans
est ce qu'il ya qlq1 qui peut m'aider svp
c'est le programme que j'ai ecrit
(((((((
#include <stdio.h>
#include <conio.h>
void main()
{char e[6];
int i=0,j=0,k=0,m=0;
for(i=0;i<1;i++)
{
printf("entrer\n");
scanf("%c",&e[i]);
if(e[i]=='e')
i++;
if(e[i]=='E')
j++;
}
printf(" il y a %d e et %d E ", m,k);
getch();
}
))))
merci d'avance;)
A voir également:
- Realiser un programme en c
- Mettre en veille un programme - Guide
- Programme demarrage windows - Guide
- Réaliser un organigramme - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
5 réponses
Merci d'éviter les abréviation et de soigner l'orthpgraphe.
Pourquoi ton code ne fonctionne pas
Ton problème se situe au niveau de ta boucle. Tu ne fais qu'examiner e[0] car i vaut 0 à la première itération, et quand il prend la valeur 1, ta boucle for se termine.
De plus, tu n'as pas initialisé le contenu de la variable "e" donc elle contient des valeurs a priori aléatoire.
Conseils préliminaires
Essaye aussi de ne pas utiliser de noms de variables aussi peu explicites. Donne de vrais noms, qui indiquent leur signification. Si tu es une puriste tu même rajouter un préfixe devant pour rappeler leur type (par exemple i si c'est un entier, s si c'est une chaîne de caractère etc...).
Enfin, il n'y a aucune raison d'inclure <conio.h> qui est un header spécifique windows et qui n'est pas utilisé dans ton code.
Une première solution
Voici à quoi pourrait ressembler ton programme :
Petites explications
Une chaîne de caractère (char *) se termine toujours par un caractère spécial, le caractère '\0' qui vaut en réalité 0. En C, toute valeur non nulle est vrai donc on pourrait écrire :
De plus, la chaîne phrase n'a pas de raison de varier dans la fonction main, donc on rajoute le mot clé (const) pour interdire une éventuelle modification.
Plus loin avec les pointeurs
Idéalement il vaudrait mieux parcourir la chaîne avec un pointeur mais c'est un concept que tu n'as peut-être pas encore vu. Si ça ne te parle pas encore, laisse tomber ce qui suit.
On peut également imaginer d'utiliser la fonction "tolower".
Au final ce serait plus ça qu'il faudrait écrire :
Bonne chance
Pourquoi ton code ne fonctionne pas
Ton problème se situe au niveau de ta boucle. Tu ne fais qu'examiner e[0] car i vaut 0 à la première itération, et quand il prend la valeur 1, ta boucle for se termine.
De plus, tu n'as pas initialisé le contenu de la variable "e" donc elle contient des valeurs a priori aléatoire.
Conseils préliminaires
Essaye aussi de ne pas utiliser de noms de variables aussi peu explicites. Donne de vrais noms, qui indiquent leur signification. Si tu es une puriste tu même rajouter un préfixe devant pour rappeler leur type (par exemple i si c'est un entier, s si c'est une chaîne de caractère etc...).
Enfin, il n'y a aucune raison d'inclure <conio.h> qui est un header spécifique windows et qui n'est pas utilisé dans ton code.
Une première solution
Voici à quoi pourrait ressembler ton programme :
#include <stdio.h> int main(){ const char *phrase = "J'aime les tapirs. Et eux aussi ils m'aiment !"; unsigned int i; unsigned int nb_e = 0; for(i = 0; phrase[i] != '\0'; ++i){ if(phrase[i] == 'e' || phrase[i] == 'E') ++nb_e; } printf("Il y a %d lettres 'e' dans la phrase '%s\n'.", nb_e, phrase); // getchar(); return 0; }
Petites explications
Une chaîne de caractère (char *) se termine toujours par un caractère spécial, le caractère '\0' qui vaut en réalité 0. En C, toute valeur non nulle est vrai donc on pourrait écrire :
for(i = 0; phrase[i]; ++i){ ... }
De plus, la chaîne phrase n'a pas de raison de varier dans la fonction main, donc on rajoute le mot clé (const) pour interdire une éventuelle modification.
Plus loin avec les pointeurs
Idéalement il vaudrait mieux parcourir la chaîne avec un pointeur mais c'est un concept que tu n'as peut-être pas encore vu. Si ça ne te parle pas encore, laisse tomber ce qui suit.
On peut également imaginer d'utiliser la fonction "tolower".
Au final ce serait plus ça qu'il faudrait écrire :
#include <stdio.h> #include <ctype.h> int main(){ const char *phrase = "J'aime les tapirs. Et eux aussi ils m'aiment !"; const char *pcur_char; char cur_char; unsigned int nb_e = 0; // Parcourir chaque caractère de 'phrase' for(pcur_char = phrase; *pcur_char; ++pcur_char){ cur_char = tolower(*pcur_char); // le caractère courant en minuscule if(cur_char == 'e') ++nb_e; } printf("Il y a %d lettres 'e' dans la phrase '%s'\n", nb_e, phrase); // getchar(); return 0; }
Bonne chance
merci mamiemando
mais ce pirogramme que tu as fais il donne seulement une resultat directement(il y a 5 .....)
moi je vx faire un programme qui demande a l"utilisateur d'entrer une phrase puis il donne la resultat
et merci d'avance
mais ce pirogramme que tu as fais il donne seulement une resultat directement(il y a 5 .....)
moi je vx faire un programme qui demande a l"utilisateur d'entrer une phrase puis il donne la resultat
et merci d'avance
Attention toutefois si l'utilisateur entre une phrase de plus de 100 caractères. En C++ on utiliserait par exemple la classe std::string pour s'affranchir de ce genre de détails. En C je pense que la fonction getline (qui sait redimensionner la zone mémoire dans laquelle on va stocker la chaîne) peut faire l'affaire, mais c'est du détail et à mon avis, pas le but de ton exercice.
Conclusion : fais comme a dit fiddy :-)
Conclusion : fais comme a dit fiddy :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question