Problème avec le langage c.

Résolu
Simker Messages postés 174 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai un problème tout bête, regardez mon code :
#include <stdio.h>
#include <stdlib.h>
main()
{
    char ouiounon;
    printf("Salut!\n");
    printf("\a");
    sleep(1000);
    printf("Tu vas bien???!!!\n");
    printf("\a");
    scanf("%d", &ouiounon);
    if (ouiounon=="oui")
    {
    printf ("Ok c'est cool!!!\n");
    }
    else
    {
    printf("Tanpis pour toi...\n");
    }
  system("PAUSE");	
}


Et il ne fait pas comme je veux...
snif
--
Si l'ennui était mortel, alors les profs seraient des assassins - Inconnu
Configuration: Windows XP
Firefox 3.0.1

11 réponses

  1. linksys23 Messages postés 140 Statut Membre 27
     
    Bonjour,
    je n'ai que survolé ton code mais je vois déjà un problème à la déclaration de la variable "ouiounon", elle doit contenir un tableau de char et non pas un seul char puisque tu veux afficher trois caractère : "oui". Donc il faut que tu déclares ta variable comme ceci :
    char ouiounon[3];

    mais je te conseil de réserver plus de trois cases car si tu entres plus de trois caractères tu risques de faire planter des programmes (c'est la faiblesse de scanf).

    Ensuite tu doit aussi modifier l'opérateur "%d" en "%s" puisque tu veux afficher une chaine de caractère.

    voilà essai de modifier ça et dit moi si ça marche.

    A+
    0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Comme linksys23 le dit, il y a une erreur au niveau de la variable ouiounon. Mais il ne faut pas oublier le \0 final.
    Donc la déclaration est : char ouiounon[4];

    Ensuite, c'est scanf("%s",ouiounon); (Il n'y a pas de &).
    Attention, ce n'est pas conseillé d'utiliser scanf pour les chaines de caractères. C'est mieux d'utiliser fgets.

    Et enfin pour comparer, il faut utiliser strcmp(ouiounon,"oui"), et non ouiounon=="oui"

    Cdt
    0
  3. Simker Messages postés 174 Statut Membre 122
     
    Ça ne marche toujours pas, il me met à chaque fois "Tampis pour toi...".
    Même si je mets "oui".
    0
  4. Simker Messages postés 174 Statut Membre 122
     
    J'ai apporté les modifications :
    #include <stdio.h>
    #include <stdlib.h>
    main()
    {
        char ouiounon[4];
        printf("Salut!\n");
        printf("\a");
        sleep(1000);
        printf("Tu vas bien???!!!\n");
        printf("\a");
        scanf("%s", ouiounon);
        if (strcmp(ouiounon,"oui"))
        {
        printf ("Ok c'est cool!!!\n");
        }
        else 
        {
             printf("Tampis pour toi...\n");
        }
      system("PAUSE");	
    }
    

    Mais ça fait l'inverse de se que je veux faire snif...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Normal, strcmp retourne 0 quand il y a égalité des chaines. Donc il faut faire if (strcmp... ==0).
    Et n'oublie pas d'inclure string.h
    D'ailleurs stdlib.h tu en as pas besoin dans ton programme.
    Cdt
    0
  7. Simker Messages postés 174 Statut Membre 122
     
    Je le mets quoi, j'ai pas compris (je suis vraiment nul)?
    0
  8. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    if(strcmp(ouiounon,"oui")==0)
    0
  9. Simker Messages postés 174 Statut Membre 122
     
    Ok!!!!!
    ça marche, merci beaucoup!!!
    0
  10. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    De rien ;)
    0
  11. tsou
     
    Bonjour
    la ligne suivante : if (ouiounon=="oui") est incorrecte parceque tu testes un caractere avec une chaine de
    caracteres.

    il faudrait definir ouiounon comme une string.

    string ouiounon ="";
    int i = strcmp(ouiounon,"oui)"; /* tu test es avec la fonction strcmp qui fournit comme reponse */
    /* 0 en cas degalite,-1 en cas d`inferiorite et un nomre positif */
    /* en cas de supperiorite */
    if (i==0) then ...
    ( ...)
    else ( .........);
    0
  12. tsou
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    main()
    {
    string ouiounon="";

    printf("Salut!\n");
    printf("\a");
    sleep(1000);
    printf("Tu vas bien???!!!\n");
    printf("\a");
    scanf("%s", ouiounon);

    if (strcmp(ouiounon,"oui")==0)
    {
    printf ("Ok c'est cool!!!\n");
    }
    else
    {
    printf("Tant pis pour toi...\n");
    }
    system("PAUSE");
    }
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Salut,
      Son problème est déjà résolu ;)
      Sinon, concernant ton code :
      En C, on utilise char* ou char[] mais pas string et, on n'utilise pas scanf("%s",...) à cause des problèmes de sécurité.

      Cdt
      0