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] probleme code de la fonction strcmp

Holopainen
Holopainen
Niveau 3
16 novembre 2007 à 21:11:39

Bonjour, j´essaie de programmer la fonction strcmp, le code que j´ai fait ne marche pas et je ne trouve pas l´(les) erreur(s) pourriez vous m´aider svp.

  1. include <stdlib.h>
  2. include <stdio.h>

long compareChaine(const char* chaine1, const char* chaine2);

int main()
{
char chaine1[] = "Texte de test", chaine2[] = "Texte de test";

if (compareChaine(chaine1, chaine2) == 0)
{
printf("Les chaines sont identiques\n");
}
else
{
printf("Les chaines sont differentes\n");
}

return 0;
}

long compareChaine(const char* chaine1, const char* chaine2)
{
char caractereActuel1 = 0, caractereActuel2 = 0;
long i = 0, resultat = 0;

do
{
if( chaine1[i] == chaine2[i] )
{
resultat = 1;
}

else
{
resultat = 0;
}
caractereActuel1 = chaine1[i];
caractereActuel2 = chaine2[i];
i++;
}while (resultat = 1 || caractereActuel1 != ´\0´ && caractereActuel2 != ´\0´);

return resultat;
}

Holopainen
Holopainen
Niveau 3
16 novembre 2007 à 21:14:50

Désolé je vien de reperer une petite erreur ( qui ne résous pas mon prbleme) a partir de la boucle do...while inversez les valeurs de la valriable resultat : 0=1; 1=0

Chaos_Clad
Chaos_Clad
Niveau 10
16 novembre 2007 à 21:38:52

Quand une instruction if ou for n´est suivie que d´une seule instruction, les accolades sont facultatives.

for(int i = 0; i < j; i++)
j--;

ne sera pas compté comme une erreur.

Sinon, pour ton problème, tu dis que les chaînes sont identiques si la fonction renvoie 0, or dans ton morceau de code tu dis que si deux caractères sont identiques alors la fonction renverra 1 (à moins que je n´ai pas compris). De plus, quand la fonction trouve deux caractères différents, elle doit s´arrêter tout de suite et retourner 1. Là toi tu fais l´impasse sur l´arrêt de la fonction.
Supposons deux chaînes : "aedfgt" et "aedggt".
Ta boucle regarde ´a´ et ´a´, c´est bon : resultat = 1.
Ta boucle regarde ´e´ et ´e´, c´est bon : resultat = 1.
Ta boucle regarde ´d´ et ´d´, c´est bon : resultat = 1.
Ta boucle regarde ´f´ et ´g´, c´est pas bon : resultat = 0.

Et là, tu te dis, mais j´ai ma condition du while ! Ben non, les priorités des opérateurs font que le && est évalué avant le ||, donc la condition :

caractereActuel1 != ´\0´ && caractereActuel2 != ´\0´

va renvoyer 1 et la condition

resultat = 1

va renvoyer 0 et 0 OU 1 = 1, donc ta boucle continue.

Ta boucle regarde ´g´ et ´g´, c´est bon : resultat = 1.
Ta boucle regarde ´t´ et ´t´, c´est bon : resultat = 1.

(bon là c´est fait en supposant que la fonction renvoie 1 si c´est bon et 0 si ce n´est pas le cas, donc à adapter)

walker-texas
walker-texas
Niveau 3
17 novembre 2007 à 14:14:34

int compareChaine(char *chaine1,char *chaine2) {
int i;
for(i=0;(chaine1[i]!=´\0´ || chaine2[i]!=´\0´);i++) {
if (chaine1[i]!=chaine2[i])
return 0;
}
return -1;
}

jaiden_yuki
jaiden_yuki
Niveau 10
17 novembre 2007 à 23:22:16

int compareChaine(char *chaine1,char *chaine2)
{
int i=0;
while(chaine1[i]!=´\0´&&chaine2[i]!=´\0´)
{
if(chaine1[i]!=chaine2[i])
        return 0; // Les chaines sont differentes
i++;
}
return 1;
}

Chaos_Clad
Chaos_Clad
Niveau 10
17 novembre 2007 à 23:38:03

Je me demande l´intêret de balancer un code comme ça sans explications. Je me suis déjà penché sur son problème de manière suffisante pour qu´il le corrige, pourquoi en rajouter ?

walker-texas
walker-texas
Niveau 3
18 novembre 2007 à 10:19:41

Mea culpa, mais bon niveau explications je pense que tu as dit ce qu´il fallait ^^... L´algorithme est quand meme super simple ici...

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