Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2013
    Messages : 9
    Points : 1
    Points
    1

    Par défaut Tableau à deux dimensions

    es-ce que quelqu'un peut m’éclaircir cet question :

    Demander a l'utilisateur de saisir les dimensions d'un tableau a deux dimensions.

    ces dimensions pourront etre stockées dans deux pointeurs de type entier (int  *L et int  * C) que l'on passe en parametre de la fonction.

    j'ai essayer avec le code suivant,le compilateur ne détecte aucune faute ,mais le programme ne marche pas correctement.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include<stdio.h>
    #include<conio.h>
     
    void saisie (int *l,int *c);
     
    int main()
    {
        int *ligne,*colonne;
     
        saisie(ligne,colonne);
        printf("%d\t%d\n",*ligne,*colonne);
        getch();
    }
     
     
    void saisie (int *l,int *c)
    {
         printf("Entrez le nombre de ligne:");
         scanf("%d",l);
         printf("Entrez le nombre de colonne:");
         scanf("%d",c);
    }

  2. #2
    Expert Confirmé Sénior
    Avatar de diogene
    Homme Profil pro Patrick Gonord
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 692
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrick Gonord
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 692
    Points : 13 642
    Points
    13 642

    Par défaut

    ces dimensions pourront etre stockées dans deux pointeurs de type entier (int  *L et int  * C) que l'on passe en parametre de la fonction.
    C'est du charabia : On ne peut stocker les dimensions dans des pointeurs qui sont des objets destinés à stocker uniquement des adresses.

    Proposition plus correcte :
    les dimensions pourront être stockées dans deux objets de type entier (int L et int C) dont on passera l'adresse à la fonction

    Conséquence :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    int main(void)
    {
        int ligne,colonne;
     
        saisie(&ligne,&colonne);
        printf("%d\t%d\n",ligne,colonne);
        getch();
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  3. #3
    Nouveau Membre du Club
    Homme Profil pro
    autre
    Inscrit en
    décembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 22
    Points : 25
    Points
    25

    Par défaut

    Et puis après tu fais un malloc(sizeof(int)*taille_ligne*taille_colonne);

    Après tu cast ton pointeur et c'est bon.

  4. #4
    Invité de passage
    Inscrit en
    juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    En gros :

    Code :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void saisie(int *val,const char *nom);
     
    int main() {
      int ligne, colonne, i, j;
      int **mat;
      saisie(&ligne,"Ligne");
      saisie(&colonne,"Colonne");
     
      // Alloc mémoire et initialisation a zero
      mat = (int**)malloc(ligne * sizeof(int*));
      for (i = 0 ; i < ligne ; i++) {
        mat[i] = (int*)malloc(colonne * sizeof(int));
      }
     
      // Initialisation
      for (i = 0 ; i < ligne ; i++) {
        for (j = 0 ; j < colonne ; j++) {
          mat[i][j] = 0;
        }
      }
     
      // Affichage
      for (i = 0 ; i < ligne ; i++) {
        for (j = 0 ; j < colonne ; j++) {
          printf("%d\t", mat[i][j]);
        }
        printf("\n");
      }
      return 0;
    }
     
     
    void saisie(int *val,const char *nom) {
      printf("%s : ", nom);
      scanf("%d", val);
    }

    Après c'est un exemple simple, mais ça peut te donner une idée...

  5. #5
    Membre chevronné
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : avril 2009
    Messages : 120
    Points : 641
    Points
    641

    Par défaut Code "bizarre" ?

    Citation Envoyé par lucci57 Voir le message

    j'ai essayer avec le code suivant,le compilateur ne détecte aucune faute ,mais le programme ne marche pas correctement.
    Je ne sais pas avec quelles options tu as compilé ton code, mais sans doute avec le minimum de contrôle, car une compilation avec gcc (ici, dans Code::Blocks) et l'option -Wall m'a fourni le commentaire suivant :

    ||=== test, Debug ===|
    test/main.c||In function ‘main’: |
    test/main.c|13|attention : contrôle a atteint la fin non void de la fonction [-Wreturn-type]|
    test/main.c|10|attention : ‘ligne’ is used uninitialized in this function [-Wuninitialized]|
    test/main.c|10|attention : ‘colonne’ is used uninitialized in this function [-Wuninitialized]|
    ||=== Build finished: 3 errors, 0 warnings ===|
    Ce qui est en soit l'indication d'un problème !

    Toutefois, il faut peut-être relativiser le terme charabia :

    En effet, il te suffit d'initialiser tes pointeurs, en leur attribuant une véritable adresse mémoire à même de stocker un ou plusieurs int, et il n'y aura plus de problème, par exemple en modifiant ton code a minima :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <stdio.h>
     
    void saisie (int *l,int *c);
     
    int main()
    {
        int ll,cc;
        int *ligne=&ll,*colonne=&cc;
     
        saisie(ligne,colonne);
        printf("%d\t%d\n",*ligne,*colonne);
        getchar();
     
        return 0;
    }
     
     
    void saisie (int *l,int *c)
    {
         printf("Entrez le nombre de ligne:");
         scanf("%d",l);
         printf("Entrez le nombre de colonne:");
         scanf("%d",c);
    }
    Donc ton code peut être correct si les deux pointeurs sont initialisés (tu peux aussi le faire avec deux malloc), mais c'est vraiment une idée bizarre de faire comme ça plutôt que passer directement les adresses des entiers à la fonction de saisie, ce qui est la méthode usuelle que t'expose simplement et fort justement diogene.
    Si ton idée "bizarre" se justifie par une raison cohérente (que je ne vois a priori pas), alors ce n'est pas du charabia, sinon, c'est que la notion de pointeur n'est peut-être pas ta spécialité et ton code est bien du charabia !

    Alors, qu'en est-il ?
    Charabia or not charabia ?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •