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 :

Problème de pointeur avec tableau multidimensionnel


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Problème de pointeur avec tableau multidimensionnel
    Bonjour,

    je voudrais faire un gestionnaire de DVD.
    Pour cela j'ai fait un menu qui me permet:
    1. De saisir des DVD
    2. de les supprimer
    3. De les rechercher
    4. De les afficher.

    Mon problème se pose pour l'affichage du tableau (ou même avant).
    J'ai crée un tableau multidimensionnel et un pointeur qui pointe sur ce tableau mais lorsque je décide d'afficher ça m'affiche des symboles.

    Est ce que vous pouvez m'aider svp? (désolé j'ai vu des sujets du même type mais je ne comprenais rien)

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #include <stdio.h>
    #include <stdlib.h>
     
    char saisirDvd();
     
    int main(void)
    {
    	menu();
    }
    int menu()
    {
    	int choix;
     
    	printf("1 - Saisir un DVD\n");
    	printf("2 - Modifier un DVD\n");
    	printf("3 - Supprimer un DVD\n");
    	printf("4 - afficher DVD\n");
    	printf("merci de selectionner un chiffre\n");
    	scanf("%ld",&choix);
    	switch (choix)
    {
    case 1:
     saisirDvd();
      menu();
    case 2:
      modifSaisi();
      menu();
    case 3:
      supprimSaisi();
      menu();
    case 4:
      affichageDvd();
      menu();
    default:
      printf("Veuillez retaper un chiffre");
      break;
    }
    	system("PAUSE");
    	return 0;
    }
    char saisirDvd()
    	{
    		char tab_saisi[50][3]; // déclaration de mon tableau
    		char * pointeur_tableau[50][3]; // création de mon pointeur
    		char reponse;
    		int i=1;
    		int j=1;
    		pointeur_tableau[50][3]= &tab_saisi[50][3];
     
    		// initialisation du tableau
    		for (i;i<4;i++)
    		{
    			for (j;j<51;j++)
    			{
    				tab_saisi[i][j]=" ";
    			}
    		} // fin initialisation
     
    		printf("Veuillez saisir le nom du film\n");
    		scanf("%s",&tab_saisi[1][1]);
    		printf("Veuillez saisir la date du film\n");
    		scanf("%s",&tab_saisi[1][2]);
    		printf("Veuillez saisir le realisateur du film\n");
    		scanf("%s",&tab_saisi[1][3]);
     
    		printf("Souhaitez vous rentrer un autre film? o ou n \n");
    		getchar();
    		reponse=(char)getchar();
     
    		for(i;i<51;i++){
    			for (j;j<4;j++){
    		if (reponse=='o')
    		{
    			while (reponse =='o'){
    		printf("Veuillez saisir le nom du film\n");
    		scanf("%s",&tab_saisi[i][j]);
    		printf("Veuillez saisir la date du film\n");
    		scanf("%s", &tab_saisi[i][j]);
    		printf("Veuillez saisir le realisateur du film\n");
    		scanf("%s", &tab_saisi[i][j]);
     
    				printf("Souhaitez vous rentrer un autre film? o ou n \n");
    				getchar();
    				reponse=(char)getchar();
    			}
    		}
    			}
    		}
    	}
    	modifSaisi()
    	{
    	}
    	supprimSaisi()
    	{
    	}
     
    affichageDvd(char *pointeur_tableau[50][3])
    	{
    		printf("liste des DVD %s\n ",&pointeur_tableau[50][3]);						
    	}

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut


    dans ton Saisir_Dvd tes tableaux sont locaux....


    Il faudrait les déclarer dans le main et les passer par adresse à toutes les fonctions..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    ça me fait toujours des symboles

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Beaucoup de confusion sur les notions de tableaux et pointeurs. Un échantillon :

    - En C les indices des tableaux commencent à 0 et non pas à 1.
    En conséquence, pour un tableau tab[4], les indices autorisés sont 0,1,2,3 et non PAS 1,2,3,4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char saisirDvd()
    	{
    		char tab_saisi[50][3]; // déclaration de mon tableau
    ... 
    		// initialisation du tableau
    		for (i=0;i<3;i++)
    		{
    			for (j=0;j<50;j++)
    			{
    				tab_saisi[j][i] =' ';
    			}
    Cette déclaration de tab_saisi défini un tableau de 50 tableaux de 3 caractères chacun, ce qui ne doit pas convenir pour cette application. L'initialisation n'est pas correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		char * pointeur_tableau[50][3]; // création de mon pointeur
    défini non pas un pointeur mais un tableau de 50 tableaux de 3 pointeurs sur char chacun

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    pointeur_tableau[50][3]= &tab_saisi[50][3];
    Met dans l'élément d'indices (50,3) (élément qui n'existe pas) de pointeur_tableau l'adresse de l'élément d'indices (50,3) (élément qui n'existe pas) de tab_saisi

    ....
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    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
    Un autre problème : tu appelles de manière récursive la fonction menu(). Il vaut mieux créer une boucle où tu puisses en sortir en sélectionnant un choix spécifique (zéro par exemple). Exemple :

    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
    void menu()
    {
       do
       {
           /* liste choix */
           /* (...) */
     
           /* saisie choix */
           /* (...) */
     
          switch (choix)
          {
             case 1:
             choix1();
             break;
     
             case 2:
             choix2();
             break;
     
             /* (... autres ... ) */
     
             default:
          }
       } while (choix!=0);
    }
    int main(void)
    {
       menu();
       return 0;
    }

Discussions similaires

  1. Problème de pointeurs avec un tableau
    Par Tom_Tom_RoF dans le forum Fortran
    Réponses: 8
    Dernier message: 05/10/2007, 17h34
  2. [SQL] Problème de pagination avec tableau
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/05/2006, 22h16
  3. problème de pointeur avec les listes chainees
    Par innosang dans le forum C
    Réponses: 9
    Dernier message: 30/12/2005, 15h46
  4. Problèmes de pointeurs avec les arbres
    Par thierry57 dans le forum C
    Réponses: 17
    Dernier message: 22/12/2005, 23h35
  5. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57

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