Problème en c (conditions)

Résolu
kuremento Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 kuremento -
Bonjour,

donc voici mon programme C

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

int main()
{

char reponse[3];

printf("peux tu me signer mon mot ? ");
scanf("%s", reponse);
fflush(stdin);


if (reponse == oui)
{
printf("merci !");

}

else if(reponse != oui)
{
printf("pourquoi !");

}



return 0;
}



alors il me dit que j'ai un problème au if.
Car mon résultat final doit être si la personne marque oui alors affiche merci sinon affiche pourquoi.

merci de votre réponse et pour se qui se pose la question de cela fflush(stdin); en faite c'est pour que l'ordi garde la donnée que la personne à marqué pour après.

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Plusieurs problèmes :
char reponse[3];
Ce n'est pas assez grand pour stocker le mot "oui". Il faut au minimum : char reponse[4];

scanf("%s", reponse);
Ce n'est pas une erreur, mais je te conseille de mettre : scanf("%3s", reponse);

fflush(stdin)
Ce n'est pas correct. Cela provoque un comportement indéterminé. Si tu veux vider le buffer clavier, il faut faire une boucle while() sur getchar(). Si tu veux garder ça dans le buffer clavier, il suffit de retirer fflush(stdin);

if (reponse == oui)
On utilise des guillemets pour parler de la chaîne "oui". De plus pour comparer des chaînes, on utilise la fonction strcmp() ou strncmp().
Par exemple :
<code c>if (strcmp(reponse, "oui")==0) {
puts("egalite");
}

else if(reponse != oui)
Même erreur que précédemment. Mais là tu n'as pas besoin de préciser la condition. Il te suffit de mettre simplement : else

Et enfin juste avant ton return 0; je te conseille d'afficher un '\n' pour forcer l'affichage des mots. Par exemple : putchar('\n');

Cdlt,
2
kuremento
 
merci pour ta réponse qui à réussi a régler tous mes problème
0
kuremento
 
juste une question pourquoi mettre egal 0 au if
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Car ça renvoie 0 en cas d'égalité.. Pour plus de précision, tu peux consulter le man.
0
kuremento
 
merci infiniment
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Les chaînes de caractères se comparent avec
strcmp (et ses variations)
man 3 strcmp
1
narra_blues Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
le oui doit etre entre apostrophes => 'oui'
paske reponse est un tableau de caracteres
-2
kuremento
 
merci mais maintenant j'ai un nouveau problème c'est que quand je lance mon programme si j'écris oui le programme m'écris pourquoi au lieu de merci.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Les apostrophes, c'est pour les caractères pas pour les chaînes. De plus, pour comparer des chaînes on n'utilise pas l'opérateur égal mais str(n)cmp()
0