Problème en c (conditions)

Résolu
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

  1. Contributeur
    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,
    1. merci pour ta réponse qui à réussi a régler tous mes problème
    2. juste une question pourquoi mettre egal 0 au if
    3. Contributeur
      Car ça renvoie 0 en cas d'égalité.. Pour plus de précision, tu peux consulter le man.
    4. merci infiniment
  2. Modérateur
    Les chaînes de caractères se comparent avec
    strcmp (et ses variations)
    man 3 strcmp
    1. le oui doit etre entre apostrophes => 'oui'
      paske reponse est un tableau de caracteres
      1. 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.
      2. Contributeur
        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()