Programmation en C

Fermé
yoann - 28 janv. 2009 à 19:48
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 janv. 2009 à 21:11
Bonjour cher internautes,

Je suis novice en matière de programmation et j'aimerais un peu d'aide ^^.

J'ai crée un petit programme demandant a l'utilisateur de saisir une lettre, puis une phrase et le programme compterais le nombre de fois ou la lettre apparaitrait dans la phrase.

Voici mon code :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char lettre[1],*chaine;
int nb=0,i=1;

do {
printf("Saisissez un caractère : ");
gets(lettre);
// vérifie si l'utilisateur tape une seule lettre
if (strlen(lettre)!=1)
printf("Une SEULE lettre !\n");
}
while(strlen(lettre)!=1);

printf("Saisissez une phrase :");
gets(chaine);

while(chaine[i]!='\0'){
if (chaine[i]==lettre){
nb++;
i++; }
else i++;
}

if (nb=0)
printf("Votre phrase ne comporte pas le caractère %c \n",lettre);

else printf("Votre phrase contient %d fois le caractère %c \n",nb,lettre);



return 0;
}

Merci d'avance pour votre aide :)

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
28 janv. 2009 à 21:11
Salut,
SI tu as un caractère à stocker dans une chaîne, utilise simplement le type char. Pas besoin de tableaux.
Qui plus est un tableau de char à un seul élément, attention. Tu dois stocker le \0.
Ensuite pour que l'utilisateur stocker un caractère dans un type char, utilise la fonction getchar(). Exemple :
char lettre;
lettre=getchar();

Dans ce cas plus besoin d'utiliser strlen. En plus, il ne faut pas utiliser la fonction gets, mais plutôt fgets. Sinon segfault dès que tu rentreras trop de caractères. Tu en auras besoin pour le tableau chaine.
Et pour ta dernière boucle while, autant utiliser :
for(i=0;i<strlen(chaine);i++){ ...

Une dernière remarque, n'oublie pas que l'opérateur d'égalité en C, est == et non = (cf ton dernier if).
Si t'as des questions n'hésite pas.
0