Saisir un tableau

programmation -  
 Utilisateur anonyme -
Bonjour,
ce programme là ne me donne pas un résultat correct
void tab (int *tab2, int nb)
{
int i;
for (i = 1; i <= nb; i++)
{printf (" entrer les elements de la base \n", tab2[i]);
scanf ("%d", &tab2[i]);
}
}
int main ()
int x[4],n;
printf("entrer le nombre des elements de x \n ",n);
scanf("%d\n",&n);
tab(x,n);
}

2 réponses

  1. Pierre1310 Messages postés 8854 Statut Membre 652
     
    Bonjour,

    scanf ("%d", &tab2[i]); pas de & pour la cellule d'un tableau.
    0
    1. Utilisateur anonyme
       
      Bonsoir.
      Lorsqu'il s'agit d'un nombre, si, on met bien &.
      Par contre, dans ce cas, on ne le met pas :

      char tab[100];
      printf("Entrez du texte : ");
      scanf("%s", tab);
      printf("Voici le texte entre : %s", tab);


      Bien sur cet exemple n'est pas le meilleur car il est déconseillé d'utiliser scanf lorsqu'on rentre une chaîne de caractère, cela peut créer plusieurs problèmes, par exemple on ne pourra pas écrire un texte avec des espaces, on verra du dépassement de mémoire etc, la meilleure syntaxe serait
      fgets(tab, 100, stdin);
      c'est la saisie de texte sécurisée

      Et petite remarque pour l'auteur, ton main ne renvoie rien ?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Utilisateur anonyme
       
      Hello,

      Si si, on peut mettre des espaces avec scanf et on peut limiter la taille.
      Par exemple : scanf("%99[^\n]", tab);

      Cdlt,
      0
    3. Utilisateur anonyme
       
      fiddy,

      On peut faire cela que en C99 non ?
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Non, en C89/90 :-).
      0
    5. Utilisateur anonyme
       
      J'apprend quelque chose, merci !
      Mais avec scanf, même avec cette syntaxe, le reste de la chaîne entrée (si elle dépasse la taille) ne sera pas enregistrée dans le buffer ? Elle sera vidée ?
      0
  2. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,
    il faut bien le & pour un élément de tableau.
    Par contre ne mets pas de "\n" dans un scanf()
    Et les indices de tableau commencent à 0 pas à 1.
    Donc
    void tab (int *tab2, int nb) 
    { 
        int i; 
        for (i = 0; i < nb; i++) 
        {
            printf( "entrer l'element de la base %d\n" , i+1 ); 
            scanf( "%d" , &tab2[i] ); 
        }
    } 
    
    int main ()
    { 
        int x[4] , n; 
        printf( "entrer le nombre d'elements de x\n " ); 
        scanf( "%d" , &n );
        if ( n <= 4 ) 
            tab(x,n);
        else
            printf("Nombre d'elements trop important\n");
    }
    0