IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Je ne comprend pas une instruction dans un code src


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Je ne comprend pas une instruction dans un code src
    Bnjr TT le monde,
    J'ai un petit souci pour comprendre un code src dont je veux exploiter.
    C'est un programme qui permet de faire un maillage à partir de coupes scanner.
    Donc sur le programme il y a une instruction
    while (strcmp(a1,"#"))
    mais le probleme c que j'arrive pas à voir la signification du # dans la comparaison.
    Pourriez vous m'aider svp URGENT
    Merci Beaucoup

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Les questions que tu dois te poser sont :
    - Que représente la variable a1 ?
    - Quelle sont les valeurs qu'elle peut prendre ?
    - A quoi sert le code qui est à l'intérieur de la boucle ?
    - Quelle sont les valeurs de retour de strcmp ?
    - En quoi ce test a-t-il un sens ?
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 81
    Points
    81
    Par défaut
    Tout ce qu'on peut dire en voyant cette portion de code, c'est que l'iteration s'arretera lorsque a1 vaudra #.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour
    Merci pour les réponses.
    Pour etre explicite. La variable a1 est un entier (ou réel). Par contre, le "#" je ne sais pas si c'est un operateur ou juste une chaine de caractere. La boucle permet de lire des points de calibration sur une sequence d'image pour transformer des coupes scanners (os par ex) en un volume exploitable par CAO pour des calculs en mécanique.
    Je vous joins la page web du code source :
    http://sirio.cineca.it/hosted/LTM-IO...2FEM_v1.1/SRC/
    Merci beaucoup et à bientot

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai oublié un truck..
    Le code source c'est voxmsh et le while se trouve dans la section READ CALIBRATION POINTS

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par tellache
    Pour etre explicite. La variable a1 est un entier (ou réel).
    Alors, tu ne respectes pas le prototype de strcmp qui attend deux chaines de caracteres (i.e. tableau de caracteres termine par '\0'). Voir man strcmp() pour plus d'information.

    Par contre, le "#" je ne sais pas si c'est un operateur ou juste une chaine de caractere.
    C'est une chaine de caractere, comme indique dans ton livre de C. J'imagine que cette partie du code repere le debut d'un commentaire (cela depend bien sur du format du fichier lu).

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DaZumba
    Alors, tu ne respectes pas le prototype de strcmp qui attend deux chaines de caracteres (i.e. tableau de caracteres termine par '\0'). Voir man strcmp() pour plus d'information.


    C'est une chaine de caractere, comme indique dans ton livre de C. J'imagine que cette partie du code repere le debut d'un commentaire (cela depend bien sur du format du fichier lu).

    Ouais, peut etre.
    Le code n'ai pas à moi peut etre a1 est une chaine de caractere mais le # ?
    Il se refere à quelle chaine de caractere .
    Merci bien
    Je debute en C dsl

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je crois que tu n'as pas le choix là .... faut que tu te mettes à apprendre le C
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par tellache
    Le code n'ai pas à moi peut etre a1 est une chaine de caractere
    a1 est tres certainement une chaine de caractere. Et vu le nom de la variable, je suppose que c'est une chaine contenant un seul caractere.

    mais le # ? Il se refere à quelle chaine de caractere.
    Ben, "#" est le tableau de caractere { '#', '\0'}. La signification de cela depend du fichier lu. Aucune signification particuliere en C (ce pourrait etre "£", "@", "u", "*", le compilateur s'en moque).

    Je debute en C
    N'oublie pas de faire les choses dans l'ordre. On apprend les bases du langage d'abord, on tente de comprendre les programmes des autres ensuite. Il y a de bons tutorials sur ce site et ailleurs.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci bien !!
    Je vais m'y mettre. D'ailleur j'ai acheté un livre il y a une semaine que j'ai fini et la je reprend de la doc sur le net pr comprendre plus.
    Merci bien encore une fois.

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par tellache
    Merci bien !!
    Je vais m'y mettre. D'ailleur j'ai acheté un livre il y a une semaine que j'ai fini et la je reprend de la doc sur le net pr comprendre plus.
    Merci bien encore une fois.
    Une semaine je crois que tu peux à nouveau l'ouvrir car le C demande plus de temps que ca ! Une semaine ... j'y crois pas, tu as simplement lu et recopié les codes sans trop chercher à comprendre c'est tout, le C est un des langage qui demande le plus de rigueure !

    Comme notre très cher Emmanuel le dirais, il faut 6 à 12 mois d'apprentissage sérieux pour le maîtriser ... du moins un minimum
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Franck.H
    Une semaine je crois que tu peux à nouveau l'ouvrir car le C demande plus de temps que ca ! Une semaine ... j'y crois pas, tu as simplement lu et recopié les codes sans trop chercher à comprendre c'est tout, le C est un des langage qui demande le plus de rigueure !

    Comme notre très cher Emmanuel le dirais, il faut 6 à 12 mois d'apprentissage sérieux pour le maîtriser ... du moins un minimum
    SI j'avais le temps mon cher ami, je l'aurai fait. Mais au jour d'aujourd'hui je ne maitrise point ce parametre...
    Merci beaucoup je vais m'y mettre.

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Il y aurait comme un bug n'attendant qu'à s'exprimer dans le programme que je ne serais pas étonné (ou alors je ne suis pas encore réveillé)...cf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [...]
    char linea[102],a1[1],b1;
    [...]
       a1[0]=b1;
       while(strcmp(a1,"#")==0)
    [...]
    Je me demande si ce n'est pas le fait que la plupart des compilateurs vont aligner les données sur une taille plus grande que les char qui le sauve...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  14. #14
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par David.Schris
    Il y aurait comme un bug n'attendant qu'à s'exprimer dans le programme que je ne serais pas étonné
    Ouch, je n'avais pas regarde le code. Comme a1 est utilise dans strcmp(), je m'attendais au moins a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char a1[2];
     
    char a1[0] = b1;
    char a1[1] = '\0';
    histoire que cela soit une vraie chaine de caractere... Eh bien, l'initiation de tellache au C commence mal...

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DaZumba
    Ouch, je n'avais pas regarde le code. Comme a1 est utilise dans strcmp(), je m'attendais au moins a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char a1[2];
     
    char a1[0] = b1;
    char a1[1] = '\0';
    histoire que cela soit une vraie chaine de caractere... Eh bien, l'initiation de tellache au C commence mal...
    si j'ai bien compris, le char a1 n'a pas la bonne declaration?

    NB : Je suis peut etre en initiation, mais le present code à fait acte de publication scientifique et je ne pense pas qu'une erreur aussi importante soit inroduite.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par tellache
    si j'ai bien compris, le char a1 n'a pas la bonne declaration?
    Exact. En tous cas, nous sommes deux à le penser...
    Il est utilisé comme une chaîne (utilisation de strcmp() pour le comparer à la chaîne "#" par exemple), or une chaîne, en C, est représentée sous la forme d'une suite de caractères terminés par un 0 (zéro terminal, ou '\0' pour la "notation caractère").
    Si on déclare a1 comme un tableau d'un caractère ("char a1[1];") et qu'on considère que c'est une chaîne, alors a1 ne peut contenir qu'une chaîne vide (puisque dans un caractère on ne peut stocker que le zéro terminal de la chaîne).
    Ce n'est pas le seul point qui peut poser problème...je n'ai pas évoqué certaines utilisations potentiellement relativement "douteuses" de fgets() (et n'ai de toutes façons fait que jeter un coup d'oeil au code).

    Citation Envoyé par tellache
    NB : Je suis peut etre en initiation, mais le present code à fait acte de publication scientifique et je ne pense pas qu'une erreur aussi importante soit inroduite.
    Quel genre de publication scientifique ? Un truc de biologie/médecine/imagerie médicale/mathématiques ? Si oui, je ne crois pas que les biologistes/etc soient forcément des experts en C (ce n'est pas ce qu'on leur demande en général). Le concept qu'il y a derrière peut être éminemment réputé/bon/etc ... et s'appuyer sur du code "moyen". Même les programmeurs font des erreurs, alors...
    Tant que ce n'était pas une publication dans "The international journal of C language" (<- j'ai inventé pour l'occasion, mais tu comprends l'idée, n'est-ce pas ?)...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui je comprend tres bien.
    Merci pour l'aide vous m'eclairez de plus en plus.
    En effet c'est une publication dans une revue de meca math couplé de medecine (biomécanique pas tres C comme moi ).

    Sinon j'ai une autre remarque. si j'ai bien compris; le code utilise un tableau de caractere pour faire une comparaison. mais si j'utilise un element pour une comparaison avec strcmp est ce possible??

    Merci bien


    Citation Envoyé par David.Schris
    Exact. En tous cas, nous sommes deux à le penser...
    Il est utilisé comme une chaîne (utilisation de strcmp() pour le comparer à la chaîne "#" par exemple), or une chaîne, en C, est représentée sous la forme d'une suite de caractères terminés par un 0 (zéro terminal, ou '\0' pour la "notation caractère").
    Si on déclare a1 comme un tableau d'un caractère ("char a1[1];") et qu'on considère que c'est une chaîne, alors a1 ne peut contenir qu'une chaîne vide (puisque dans un caractère on ne peut stocker que le zéro terminal de la chaîne).
    Ce n'est pas le seul point qui peut poser problème...je n'ai pas évoqué certaines utilisations potentiellement relativement "douteuses" de fgets() (et n'ai de toutes façons fait que jeter un coup d'oeil au code).

    Quel genre de publication scientifique ? Un truc de biologie/médecine/imagerie médicale/mathématiques ? Si oui, je ne crois pas que les biologistes/etc soient forcément des experts en C (ce n'est pas ce qu'on leur demande en général). Le concept qu'il y a derrière peut être éminemment réputé/bon/etc ... et s'appuyer sur du code "moyen". Même les programmeurs font des erreurs, alors...
    Tant que ce n'était pas une publication dans "The international journal of C language" (<- j'ai inventé pour l'occasion, mais tu comprends l'idée, n'est-ce pas ?)...

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Bonjour,

    Citation Envoyé par tellache
    Sinon j'ai une autre remarque. si j'ai bien compris; le code utilise un tableau de caractere pour faire une comparaison. mais si j'utilise un element pour une comparaison avec strcmp est ce possible??
    Un élément d'un tableau de caractères (donc un caractère) ?
    Non. Lis la page de manuel de strcmp() : tu verras que ce sont des "chaînes" [1] qui sont attendues.

    Cordialement,
    DS.

    [1] - Même si le type "chaîne" n'existe pas en C...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oki ,
    Message reçu 5 / 5
    Admettons que j'utilise une chaine de caractere dans la comparaison; Alors si je le compare avec mon fameux "#". ma question est loin d'avoir trouver une reponse. Que mon # signifie...

    Merci beaucoup..

  20. #20
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par tellache
    Admettons que j'utilise une chaine de caractere dans la comparaison; Alors si je le compare avec mon fameux "#". ma question est loin d'avoir trouver une reponse. Que mon # signifie...
    Tu peux la refaire en francais ?
    Resumons:
    Tu as un caractere que tu veux comparer avec un autre (ton # par exemple). Tu fais simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char a1;
    ...
    if (a1 == '#')
    {
      ...
    }
    Note les simple quotes ' autour du #. Si tu travailles avec des chaines de caracteres cette fois, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char a1[2];
    ...
    /* make sure that a1[1] = '\0' */
    ...
    if (strcmp(a1, "#") == 0)
    {
      ...
    }
    Note les double quotes " autour du #.
    Quant a la signification de # dans ton cas, on ne peut pas deviner. Cela depend du format du fichier que tu lis.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Je ne comprends pas une partie de mon code
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 21/12/2008, 19h42
  2. Réponses: 6
    Dernier message: 08/02/2007, 10h37
  3. Ne comprends pas une exception SQL
    Par n@n¤u dans le forum Outils
    Réponses: 3
    Dernier message: 13/07/2006, 13h04
  4. Comprend pas une erreur
    Par vodevil dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2006, 04h00
  5. [Boolean]Je ne comprend pas cette instruction
    Par jcachico dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/01/2006, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo