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]question : struct et chaine de char

u-corsu-mafiosu
u-corsu-mafiosu
Niveau 8
30 décembre 2009 à 15:05:50

bonjour les programmeurs !

je poste ceci, et c'est peut-être une question un peu bête mais je débute alors soyez indulgents svp.

je voudrais savoir s'il était possible, en langage C de comparer une chaine de caractère avec une autre, la deuxième étant une chaine contenue dans une structure.

Je m'explique : en gros est-il possible d'avoir une expression comme celle-ci :

if (chaine1[i]==struct[j].chaine2[k])

et faire ce que l'on veux ensuite, tout cela en faisant une itération de i, de j et de k indépendamment évidemment.

je vous remercie d'avance pour toute aide, et puis aussi déjà d'avoir pris le temps de comprendre ce que j'ai écris (j'espère que c'est assez clair, j'ai fait de mon mieux ...)

_viper_
_viper_
Niveau 10
30 décembre 2009 à 15:09:46

En programmation, il est bon de se poser la question "y a-t-il une raison qui m'empêche de faire ce que je veux" plutôt que de se demander "est-ce que c'est possible ?".
Je répondrais à la première question dans ton cas : non il n'y a rien qui t'empêche de faire ce que tu veux.

Par contre dans ton exemple, tu ne compares pas les chaînes mais des caractères contenus dans les chaînes. Si tu veux directement comparer deux chaînes, il te faut passer par la fonction strcmp (que tu trouveras dans string.h).
Concernant la structure, il faut bien se dire que même si les champs d'une structure sont liés à celle-ci, ils s'utilisent comme n'importe quelle autre variable du même type. Ainsi, qu'une chaîne de caractères soit contenue dans une structure ou non, elle s'utilise strictement de la même manière.

u-corsu-mafiosu
u-corsu-mafiosu
Niveau 8
30 décembre 2009 à 15:20:02

merci viper.

concernant le strcmp je connaissais cette fonction, mais étant donné qu'en cours nous n'avons encore vu que le <stdio.h> et "effleuré" le <stdlib.h>, j'avais peur de m'aventurer là dedant. Par contre oui, le faite de comparer les caractères des chaines et non de la chaine elle même est fait exprès pour laisser de la "souplesse" à la recherche. j'afficherai le résultat au bout d'un certain nombre de correspondance pour que l'utilisateur trouve quelque chose même s'il a fait une faute d'orthographe ou n'a pas tapé le nom entier lors de sa recherche.

_viper_
_viper_
Niveau 10
30 décembre 2009 à 16:42:40

C'est une méthode en effet, il est toujours bon de coder ses propres fonctions pour adapter à ses besoins.
J'attirerais juste ton attention sur le fait qu'il faut également faire des tests pour éviter une erreur de segmentation : par exemple, si i est supérieur ou égal à la taille de la chaîne enregistrée dans chaine1, ton programme risque de planter.

u-corsu-mafiosu
u-corsu-mafiosu
Niveau 8
30 décembre 2009 à 16:55:15

je sais il suffit d'initialiser i=0 de faire un while(chaine1[i] != \0) et de ne pas oublier de mettre un i++ à la fin.

_viper_
_viper_
Niveau 10
30 décembre 2009 à 16:58:00

C'est une façon de faire, en effet. '\0' entre guillemets car c'est un caractère.
Et bien puisque tu sais tout ce qu'il faut faire, il ne me reste plus qu'à te souhaiter un bon codage ^^

u-corsu-mafiosu
u-corsu-mafiosu
Niveau 8
30 décembre 2009 à 17:02:26

merci pour ton aide viper !

dnob700
dnob700
Niveau 10
31 décembre 2009 à 15:23:58

"je sais il suffit d'initialiser i=0 de faire un while(chaine1[i] != \0) et de ne pas oublier de mettre un i++ à la fin. "

Attention, si tu fait ça, tu dois aussi tester que tu ne sors pas de la chaîne avec laquelle tu fais la comparaison.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment