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 :

Aucun bug mais pourtant, ca ne marche pas


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Aucun bug mais pourtant, ca ne marche pas
    Bonjour, j'ai un projet composé de trois fichier: main.c , emb_fonct.c et emb.h
    Ca ne marche pas mais je ne sais pas pourquoi.
    Le probleme: je remplis ma route R à l'aide de la fonction Initialiser mais c'est comme si la route n'était pas enregistrée dans la memoire puisque mes printf qui suivent n'arrivent pas à accéder à ma route.
    D'ou vient le probleme?

    voici le main.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdio.h>
    #include <stdlib.h>
    #include "emb.h"
     
     
     
     
     
     
    int main(){
     
    int i=0;
     
        route R;
     
            Initialiser( R);
            // Le probleme: je remplis ma route R à l'aide de la fonction Initialiser mais c'est comme si la route n'était pas enregistrée
            //dans la memoire puisque mais printf qui suivent n'arrivent pas a accéder a ma route.
            // peux tu m'expliquer d'ou viens le probleme?
            //merci
     
     
     
     
     
            printf("position:%d\n ",R.tab[i].pos);
             printf(" vitesse:%d% \n",R.tab[i].vit);
             printf(" probabilite de freinage: %f \n",R.tab[i].proba_freinage);
             printf(" id: %c\n",R.tab[i].id);
     
             printf(" nombre de voiture sur la route:%d\n",R.nbV);
           //affichage(R);
     
     
     
    }
    Voici le emb.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    typedef struct voiture voiture;
    struct voiture{
    int pos;
    int vit;
    float proba_freinage;
    char id  ;
    };
     
     
    typedef struct route route;
    struct route{
     
    voiture tab[79];
    int nbV; //nombres de voitures dans le tableau
     
     
    };
     
     
    void Initialiser(route R);
    void affichage(route R);
    voici le emb_fonct.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "emb.h"
     
     
    void Initialiser(route R){//creer une route R
        int i=0;
        char carac = 'o';
     
     
        printf("Combien de voitures se trouvent sur la route (entre 0 et 80)?\n");//mettre un LVB??
        scanf("%d",&R.nbV);
         while((long)getchar()!=10);
     
     
     
            for(i=0;i<=79;i++)
            {
                R.tab[i].id = carac;
            }
     
     
            for(i=0; i<R.nbV ;i++)
            {
                //remplir le type voiture
                printf("Quel est la position de la voiture sur la route(entre 0 et 79)?\n");//prendre en compte le fait que deux voitures ne peuvent pas occuper la meme position
                scanf("%d",&R.tab[i].pos);
                 while((long)getchar()!=10);//vide le buffer du scanf, celui ci n'est pas forcement utile
     
                printf("Quel est la vitesse de la voiture sur la route(entre 0 et 5)?\n");
                scanf("%d",&R.tab[i].vit);
                 while((long)getchar()!=10);
     
     
                printf("Quel est la probabilite de freinage de la voiture sur la route(entre 0 et 1)?\n");
                scanf("%f",&R.tab[i].proba_freinage);// probleme si on rentre une lettre au lieu d'un chiffre
                 while((long)getchar()!=10);
     
                printf("Quel lettre permet d'identifier la voiture (entrer un charactere different de o)?\n");
                scanf("%c",&R.tab[i].id);
                while((long)getchar()!=10);
     
    /*char ref='o';
         for(i=0;i<=79;i++){
            if(R.tab[i].id!=ref){
             printf("position:%d\n ",R.tab[i].pos);
             printf(" vitesse:%d% \n",R.tab[i].vit);
             printf(" probabilite de freinage: %f \n",R.tab[i].proba_freinage);
             printf(" id: %c\n",R.tab[i].id);
             printf(" nombre de voiture sur la route:%d\n",R.nbV);
            }
     
     
            }*/
    }
    }
     
     
    void affichage(route R){//afficher une route R
        int i;
    char ref='o';
         for(i=0;i<=79;i++){
            if(R.tab[i].id!=ref){
             printf("position:%d\n ",R.tab[i].pos);
             printf(" vitesse:%d% \n",R.tab[i].vit);
             printf(" probabilite de freinage: %f \n",R.tab[i].proba_freinage);
             printf(" id: %c\n",R.tab[i].id);
             printf(" nombre de voiture sur la route:%d\n",R.nbV);
     
            }
         }
     
     
    }
    J'espère que ce n'est pas une histoire de pointeur (puisque j'ai essayé avec des pointeurs et ca ne marchait pas)


    Merci a tous.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Il faut passer à la fonction l'adresse de l'objet afin qu'elle travaille dessus. Or, là, tu passes à la fonction une copie de l'objet. Du coup, l'objet initial (celui à modifier) est au statu quo.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    ok merci, je vais essayer de voir ca, meme si j'ai un peu de mal a comprendre ce que tu me demandes.
    Merci

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par Yoshi21 Voir le message
    ok merci, je vais essayer de voir ca, meme si j'ai un peu de mal a comprendre ce que tu me demandes.
    Merci
    En C, les paramètres sont passés par valeur. C'est-à-dire que la valeur du paramètre (ou le contenu d'une variable) qui est transmis à la fonction appelée. Les deux extraits suivants sont donc équivalents :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int x = 2;
     
    fonction (x);

    Si tu veux que ta fonction écrive dans une structure déjà existante, il faut que tu lui dise où elle se trouve, donc que tu lui donnes son adresse en mémoire. Par conséquent, tu dois utiliser un pointeur :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    void Initialiser (Route * R);

    Et, dès lors, le paramètre de ta fonction n'est plus la valeur de ta Route R, mais l'endroit en mémoire où s'en trouve une instance déja existante :


  5. #5
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Aucun bug mais pourtant, ca ne marche pas
    Quand ca ne marche pas, il y a obligatoirement un bug...

    Cas classique de non compréhension des appels de fonctions et de leur arguments en C...

    Te reste plus qu'a réviser ton cours de C

    Bon courage.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    ok merci, c'est résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. site en ligne mais lien cliquable ne marche pas
    Par Invité dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 02/05/2011, 09h34
  2. Réponses: 1
    Dernier message: 23/10/2009, 10h13
  3. Réponses: 2
    Dernier message: 08/04/2008, 16h29
  4. Réponses: 4
    Dernier message: 16/02/2007, 14h51
  5. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11

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