affichage d'une structure

affichage d'une structure - C - Programmation

Marsh Posté le 26-01-2014 à 11:45:39    

Bonjour  
 
Je suis en train de coder un programme en C avec Dev-C++. Ce programme utilise la notion de la structure. J'ai des problèmes à l'exécution de mon code. Je vais vous présenter un petit exemple pour vous pouvez m'aider et merci d'avance.

Code :
  1. #include <stdio.h>
  2.        struct voiture
  3.        {
  4.          char matricule[10];
  5.          };
  6.        
  7.               void saisie_voiture(struct voiture v)
  8.               {
  9.                   //struct voiture v;  
  10.                    printf("\n donner la matricule de la voiture :" );
  11.                    scanf( "\n %s",&v.matricule);
  12.                }
  13.                void affich(struct voiture v)
  14.                {
  15.                     printf("les caractéristique de la voiture sont :\n" );
  16.                     printf("matricule : %s \n",v.matricule);                   
  17.                 }
  18. int main()
  19. {
  20.     struct voiture v;
  21.     saisie_voiture(v);
  22.     affich(v);
  23.     system("pause" );
  24.     return 0;
  25. }


 
A l'exécution il m'a demandé de saisir la matricule. je lui donner cette matricule mais il ne m'affiche pas ce que j'ai saisi il m'affiche un caractère différent (point d’interrogation inversé);

Reply

Marsh Posté le 26-01-2014 à 11:45:39   

Reply

Marsh Posté le 26-01-2014 à 12:12:48    

L'erreur vient du passage de la structure par valeur (copie) et non par "références" et en C le seul moyen c'est le pointeur.
Donc saisie_voiture modifie la valeur "locale" v et non la variable v de la fonction main.

Code :
  1. #include <stdio.h>
  2.        struct voiture
  3.        {
  4.          char matricule[10];
  5.          };
  6.      
  7.               void saisie_voiture(struct voiture *v)
  8.               {
  9.                   //struct voiture v;   
  10.                    printf("\n donner la matricule de la voiture :" );
  11.                    scanf( "\n %s",&v.matricule);
  12.                }
  13.                void affich(struct voiture *v)
  14.                {
  15.                     printf("les caractéristique de la voiture sont :\n" );
  16.                     printf("matricule : %s \n",v.matricule);                 
  17.                 }
  18. int main()
  19. {
  20.     struct voiture v;
  21.     saisie_voiture(&v);
  22.     affich(&v);
  23.     system("pause" );
  24.     return 0;
  25. }


 
Le "*" déclare que la fonction attend un pointeur sur une "struct voiture" et le "&" permet de récupérer l'adresse du "v" de la fonction main...
 
Et comme dit un peu partout dans le forum, attention au scanf, c'est source de plein de pbs (préférer le couple fgets/sscanf)


Message édité par dreameddeath le 26-01-2014 à 12:16:03
Reply

Marsh Posté le 26-01-2014 à 12:23:10    

Merci pour votre réponse :).
Pour réussir l'exécution de ce problème, on remplace le point par -> dans les deux fonctions.

 

une autre question svp : y'a t'il une autre manière pour résoudre ce problème sans utilisation de la notion du pointeur.


Message édité par kochfet le 26-01-2014 à 12:26:11
Reply

Marsh Posté le 26-01-2014 à 12:32:04    

Quel "problème" : c'est la bonne manière de faire. En C (car c'est comme ça que fonctionne un processeur et sa mémoire après tout), la notion de pointeur est centrale...
 
Sinon en relisant le code, il y 2 erreurs, en fait il fallait replacer les v.matricule par v->matricule.
 
 
En C++  il y a la notion de référence

Code :
  1. #include <stdio.h>
  2.        struct voiture
  3.        {
  4.          char matricule[10];
  5.          };
  6.    
  7.               void saisie_voiture(struct voiture &v)
  8.               {
  9.                   //struct voiture v;   
  10.                    printf("\n donner la matricule de la voiture :" );
  11.                    scanf( "\n %s",&(v.matricule));
  12.                }
  13.                void affich(struct voiture &v)
  14.                {
  15.                     printf("les caractéristique de la voiture sont :\n" );
  16.                     printf("matricule : %s \n",v.matricule);               
  17.                 }
  18. int main()
  19. {
  20.     struct voiture v;
  21.     saisie_voiture(v);
  22.     affich(v);
  23.     system("pause" );
  24.     return 0;
  25. }


 
Il est vrai qu'en C++  c'est plus lisible...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed