CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Problème strcmp & printf

Tritero10
Tritero10
Niveau 1
08 mars 2021 à 15:42:57

Salut,

J'ai écrit un programme simple en C. Il demande si on est une homme ou une femme et écrit du texte.
Mon problème, c'est que quand l'utilisateur dit qu'il est un homme, la console affiche "Bienvenue madame!" et c'est vrai pour l'autre scénario aussi.
Je pige vraiment pas, qu'est-ce que j'ai raté...

Le code:

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

int main()

{
    char sexe[7];

    printf("Homme ou Femme?\n");
    scanf("%s", sexe);

    if ( strcmp(sexe, "Homme")) {
        printf("Bienvenue monsieur !");
    }

        if( strcmp(sexe, "Femme"))  {
        printf("Bienvenue madame !");
    }
    return 0;
}
cybevil
cybevil
Niveau 27
08 mars 2021 à 15:46:31

Revérifie le comportement de strcmp, elle peut te renvoyer 3 chose différente donc ça n'a pas de sense de la mettre tel quel dans une condition comme si elle renvoyait un boolean

Message édité le 08 mars 2021 à 15:47:30 par cybevil
Tritero10
Tritero10
Niveau 1
08 mars 2021 à 15:54:17

Le 08 mars 2021 à 15:46:31 cybevil a écrit :
Revérifie le comportement de strcmp, elle peut te renvoyer 3 chose différente donc ça n'a pas de sense de la mettre tel quel dans une condition comme si elle renvoyait un boolean

Qu'est-ce que je devrais utiliser alors ?

A la base je voulais utiliser:
if(sexe == "Femme")
Mais en C, cela ne marche pas.
Ensuite, sur stackoverflow https://stackoverflow.com/questions/8004237/how-do-i-properly-compare-strings-in-c/8004250#8004250
Ils disaient d'utiliser strcmp à la place...

Message édité le 08 mars 2021 à 15:54:47 par Tritero10
cybevil
cybevil
Niveau 27
08 mars 2021 à 15:55:43

Non tu n'as pas compris, il faut utiliser strcmp, seulement, la fonction te renvoie 0 si les 2 string sont égaux donc tu dois faire if( strcmp(sexe, "Femme")==0) pour tester l'égalité des 2 chaînes

Suzuka_Nakamoto
Suzuka_Nakamoto
Niveau 10
08 mars 2021 à 15:56:10

Il te faudrai pas include string.h pour utiliser strcmp ?

Message édité le 08 mars 2021 à 15:57:55 par Suzuka_Nakamoto
cybevil
cybevil
Niveau 27
08 mars 2021 à 15:58:32

Ici tu peux voir les 3 possibilités qu'offre la fonction :

https://image.noelshack.com/fichiers/2021/10/1/1615215479-capture00.png

Message édité le 08 mars 2021 à 15:58:43 par cybevil
Pseudo supprimé
Pseudo supprimé 09 mars 2021 à 17:20:49

Faut dire que si tu codes le 8 mars... :dehors:

HosterThePepe
HosterThePepe
Niveau 6
09 mars 2021 à 19:38:30

Le 09 mars 2021 à 17:20:49 SithisMinion a écrit :
Faut dire que si tu codes le 8 mars... :dehors:

Chapeau bas

SemenceDeCobra
SemenceDeCobra
Niveau 6
09 mars 2021 à 23:36:44

if ( !strcmp(sexe, "Homme") ) {

}

Et homme =/= Homme attention

_lucco_
_lucco_
Niveau 10
10 mars 2021 à 00:31:47

Déjà perso j'aurais mis la réponse de l'utilisateur en lowercase pour éviter la sensibilité à la casse.
Et tu peux juste faire un
if(homme) {}
else { // traitement femme }

plutot que if(homme]{}
if{femme}

Vu que si t'es pas un homme, t'es forcément une femme ( :) )

GouKen91
GouKen91
Niveau 82
10 mars 2021 à 21:21:02

man strcasecmp vdd.

lokilok
lokilok
Niveau 16
10 mars 2021 à 21:56:55

C'est pas standard.

godrik
godrik
Niveau 30
10 mars 2021 à 22:11:26

@lokilok, heu, strcasecmp a l'air d'etre dans POSIX 2018:
https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcasecmp.html

Et ca a l'air d'etre deja dans POSIX 2008.

Apres, quand tu vois que la doc dis:
"When the LC_CTYPE category of the locale being used is from the POSIX locale, these functions shall behave as if the strings had been converted to lowercase and then a byte comparison performed. Otherwise, the results are unspecified." ca ne donne pas envie d'utiliser ce truc la...

lokilok
lokilok
Niveau 16
10 mars 2021 à 22:17:02

Je parle du standard C, on sait pas sur quel système il est, c'est le seul standard qui est dispo partout.

Message édité le 10 mars 2021 à 22:18:23 par lokilok
godrik
godrik
Niveau 30
11 mars 2021 à 00:15:37

Ah! Gotcha!
J'ai tendance a penser que POSIX est un standard universel. Mais en effet il y a des systemes pas POSIX.

Message édité le 11 mars 2021 à 00:15:50 par godrik
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment