Forum Clubic

Problème C

Bonjour,
j’ai crée un petit programme en C qui pour manipuler des tableau, cree, remplit et affiche un tableau, la compilation reussit mais l’execution affiche n’importe quoi. Voici le code :

/*
 Programme qui cree, remplit et affiche un tableau */

#include <stdio.h>
void CreeTab(int n); // prototype fonction
void AfficheTab(int Tab[],int n); // prototype fonction

int main()
{
      int n,i;
      int T[100];
      printf("Entrer la taille du tableau : ");
      scanf("%d",&n); 
      
      CreeTab(n);
      AfficheTab(T,n);
      return 0;
}     

/* Fonction qui cree et remplit un tableau */
void CreeTab(int n)
{
      int i;
      int Tab[100] ;
    
      for(i=1;i<=n;i++)
      {
          printf("Saisir l'element %d : ",i);
          scanf("%d",&Tab[i]);
      }
}

/* Fonction qui affiche un tableau */
void AfficheTab(int Tab[],int n)
{
      int i;
      printf("Affichage du tableau (dimension %d): \n", n);         
      for(i=1; i<=n; i++)
      printf(" %d ", Tab[i]);
}

Merci d’avance pour votre aide

Salut,

Si le problème est que les nombres que tu saisis ne sont pas correctement affichés (affichage de nombres “aléatoires”) alors je crois que j’ai compris ton problème: dans la méthode CreeTab ton tableau est créé en local et détruit lors du retour de la fonction à l’appelant. Quand tu appelles “AfficheTab” c’est un autre tableau que tu donnes (celui dans ton main). L’affichage n’est donc pas ce que tu attends. La solution et de passer ton tableau en paramètre de CreeTab (comme tu le fais avec AfficheTab).

J’espère que j’ai été assez clair…

Bonne semaine

En effet si c’est ca le problème ca résoudrais la situation…

C’est exactement ce qui m’arrive, bravo, je fais renter : 1 2 3 et le programme m’affiche : 21545441 2545800 2650000.
Avec ta proposition, le jeu est joué, tout est rentré dans l’ordre.
Merci bcp
TRES BON DEBUT DE SEMAINE

Salut dans ta fonction
void CreeTab(int n)
{
int i;
int Tab[100] ;

for(i=1;i<=n;i++)
{
printf(“Saisir l’element %d : “,i);
scanf(”%d”,&Tab[i]);
}
}

Dans ta boucle ce ne serait pas plutot for(i=0;i<n;i++) pour pouvoir inserer un entier dans la premiere case de ton tableau ? Parce que sinon on commence à entrer les valeurs à tab[1]

je me trompe surement, je reprned le developpement apres des années d’inactivité !

Nah, ca commence toujours à zéro dans les boucles, peut importe le chiffre que tu mets, y compris les conditions :jap: a moins d’assigner une autre valeur de départ à i bien sur :jap:

En fait, j’ai examiné le code, tu n’ecris pas au debut du tableau c’est à dire à tab[0], car dans ta boucle tu initialise i à 1.
Donc en fait la premiere cas de tab n’est pas rempli.
Ensuite quand tu lis le tableau tu le lis directement à tab[1].
Mais tu affiche bien le bon contenu.

Mais pour faire mieux, dans ton code tu pourrais meme utiliser la fonction malloc(), pour ne reserver que l’espace necessaire à ce que tu veux taper dans ton tableau :paf: