Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
915 connectés 

 


Dernière réponse
Sujet : [C] une fonction qui retourne un tableau ..
thadawg Merci encore, mais un pb subsiste : j'ai du mal a mettre le tableau ainsi crée en argument d'une autre fonction, ca donne :
 
--------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char lireligne(char s[])
{
     int c,i;
 
     i=0;
     printf("saisir la ligne\n" );
     while ((c=getchar())!='\n')
           s[i++]=c;
     if (c == '\n')
          s[i++] = c;
    s[i] = '\0';
}
 
/*************************************************
*****************************/
 
int * creer_tableau(int * Tab , int Lignes , int Colonnes)
{
   return realloc(Tab, Lignes * Colonnes * sizeof(int));
}
 
/*************************************************
*****************************/
void recherche_fonction( char str[], char str2[], int k, int * tab[][])
{
int i=0,j=0,m=0,n=0;
int * MonTableau = NULL;
   int nb_lignes = 1;
   int nb_colonnes = 4;
   char * pch;
 
   MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
 
 
 
 
pch=strstr(str,str2);
printf("%s\n",pch);
 
 
     for (n = 0; n < nb_colonnes; n++)
     {
         if (pch==NULL) {
            MonTableau[n * nb_colonnes + k] = -1;
            }
 
         else {
         MonTableau[k * nb_colonnes + n] = pch-str+1;
         pch = strstr (pch+3,str2);
         nb_lignes++;
         printf("on augmente" );
         MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
         }
     }
 
 
/* impression tableau */
for (j = 0; i < nb_colonnes; j++)
{
    for (i = 0; i < nb_lignes ; i++)
    {
        printf("%d\t",MonTableau[i * nb_colonnes + j]);
    }
}
/* fin impression tableau */
 
}
/******************************************************************************/
 
 
void main(void)
{
    char ligne[100];
    char ligne2[3];
    int * MonTableau = NULL;
    int i=0,j=0;
    int n;
 
 
    lireligne(ligne);
    recherche_fonction(ligne , "cos" , 0 , MonTableau);
 
 
 
   //MonTableau[3 * nb_colonnes + 5] = 20; /* pour acceder à MonTableau[3][5] */
 
   //nb_lignes = 30;
   //MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
 
   /* nouvelle taille 30 * 20 - Attention à ne pas toucher au nombre de colonnes (la largeur)*/
 
 
 
 
 
}
--------------------
 
Je comprends pas pourquoi ca me sort un tableau infini ?

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
thadawg Merci encore, mais un pb subsiste : j'ai du mal a mettre le tableau ainsi crée en argument d'une autre fonction, ca donne :
 
--------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char lireligne(char s[])
{
     int c,i;
 
     i=0;
     printf("saisir la ligne\n" );
     while ((c=getchar())!='\n')
           s[i++]=c;
     if (c == '\n')
          s[i++] = c;
    s[i] = '\0';
}
 
/*************************************************
*****************************/
 
int * creer_tableau(int * Tab , int Lignes , int Colonnes)
{
   return realloc(Tab, Lignes * Colonnes * sizeof(int));
}
 
/*************************************************
*****************************/
void recherche_fonction( char str[], char str2[], int k, int * tab[][])
{
int i=0,j=0,m=0,n=0;
int * MonTableau = NULL;
   int nb_lignes = 1;
   int nb_colonnes = 4;
   char * pch;
 
   MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
 
 
 
 
pch=strstr(str,str2);
printf("%s\n",pch);
 
 
     for (n = 0; n < nb_colonnes; n++)
     {
         if (pch==NULL) {
            MonTableau[n * nb_colonnes + k] = -1;
            }
 
         else {
         MonTableau[k * nb_colonnes + n] = pch-str+1;
         pch = strstr (pch+3,str2);
         nb_lignes++;
         printf("on augmente" );
         MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
         }
     }
 
 
/* impression tableau */
for (j = 0; i < nb_colonnes; j++)
{
    for (i = 0; i < nb_lignes ; i++)
    {
        printf("%d\t",MonTableau[i * nb_colonnes + j]);
    }
}
/* fin impression tableau */
 
}
/******************************************************************************/
 
 
void main(void)
{
    char ligne[100];
    char ligne2[3];
    int * MonTableau = NULL;
    int i=0,j=0;
    int n;
 
 
    lireligne(ligne);
    recherche_fonction(ligne , "cos" , 0 , MonTableau);
 
 
 
   //MonTableau[3 * nb_colonnes + 5] = 20; /* pour acceder à MonTableau[3][5] */
 
   //nb_lignes = 30;
   //MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
 
   /* nouvelle taille 30 * 20 - Attention à ne pas toucher au nombre de colonnes (la largeur)*/
 
 
 
 
 
}
--------------------
 
Je comprends pas pourquoi ca me sort un tableau infini ?
thadawg

Citation :

tu renvois un tableau créé localement = qui n'existera plus des que tu quitteras ta fonction.


 
Merci bcp , c'était exactement ca mon problème !

HelloWorld tu peux faire une bidouille proche de ce que tu souhaites:

Code :
  1. void creer_tableau(int ** Tab , int Lignes , int Colonnes)
  2. {
  3.     *Tab = realloc(*Tab, Lignes * Colonnes * sizeof(int));
  4. }
  5. int * MonTableau;
  6. void main(void)
  7. {
  8.     int * MonTableau = NULL;
  9.     int nb_lignes = 10;
  10.     int nb_colonnes = 20;
  11.     creer_tableau(&MonTableau, nb_lignes, nb_colonnes);
  12.     MonTableau[3 * nb_colonnes + 5] = 20; /* pour acceder à MonTableau[3][5] */
  13. }


 
ou meme (pareil ...)
 

Code :
  1. int * creer_tableau(int * Tab , int Lignes , int Colonnes)
  2. {
  3.     return realloc(Tab, Lignes * Colonnes * sizeof(int));
  4. }
  5. void main(void)
  6. {
  7.     int * MonTableau = NULL;
  8.     int nb_lignes = 10;
  9.     int nb_colonnes = 20;
  10.     MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
  11.     MonTableau[3 * nb_colonnes + 5] = 20; /* pour acceder à MonTableau[3][5] */
  12.     nb_lignes = 30;
  13.     MonTableau = creer_tableau(MonTableau, nb_lignes, nb_colonnes);
  14.     /* nouvelle taille 30 * 20 - Attention à ne pas toucher au nombre de colonnes (la largeur)*/
  15. }


 
Le probleme, c'est qu'il faut penser à libérer tout ça après.
 
"int * creer_tableau ( )  
{  
int tab[ligne][colonne];  
// initialisation du tableau  
}"
 
ce code est faux pour 2 raisons :
    -pas d'initialisation dynamique possible : int tab[<variable>]; n'est pas possible
    -tu renvois un tableau créé localement = qui n'existera plus des que tu quitteras ta fonction.

El_gringo

VisualC++ a écrit a écrit :

tableau[i]  




non !
 
 
La je pars, g vraiement pas le temps de répondre... demain.

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

VisualC++ tableau[i]
thadawg Merci pour vos reponses  :)  
 
Une fois "int* tableau= creer_tableau() " écrit, comment je récupère les valeurs qui sont dans tableau ?
tgrx :??:  
 
int* tableau= creer_tableau()
El_gringo

thadawg a écrit a écrit :

Ok merci de ta reponse  ;)  
 
Bon , du coup , je veux faire plutôt ca :
 
int * creer_tableau ( )  
{
int tab[ligne][colonne];
// initialisation du tableau
}




 
Marchera pas !
tu peut pas créer de tableau avec des variables de cette façon: ligne et colone doivent être des constantes !
 

thadawg a écrit a écrit :

 
Comment recupérer mon tableau ?
Je veux dire dans main ( ), si j'ai :
 
------
 
main ()
{
xxx = creer_tableau();
}
 
------
 




au mieux, tu peux récupérer un pointeur vers ton tableau (ce qui, en passant, est la même chose qu'un tableau, la simplicité d'écriture en moins !

thadawg Ok merci de ta reponse  ;)  
 
Bon , du coup , je veux faire plutôt ca :
 
int * creer_tableau ( )  
{
int tab[ligne][colonne];
// initialisation du tableau
}
 
Comment recupérer mon tableau ?
Je veux dire dans main ( ), si j'ai :
 
------
 
main ()
{
xxx = creer_tableau();
}
 
------
 
que dois-je declarer pour xxx ? de manière à recupere un tableau ?
 
merci d'avance
darkoli Ah ca c'est pas possible en C. En gros tu veux pouvoir créer une variable de type tableau d'entier pendant l'execution du programme. En C ce n'est pas possible je crois.
 
Par contre en javascript tu peux !!!
thadawg Comment créer une focntion qui aurait en argument le nom du tableau souhaité, ainsi que la taille de celui-ci et qui retournerait un tableau, tel que :
 
int * creer_tableau ( nom_du_tableau , nb_ligne , nb_colonne )
 
comment recuperer le tableau qui sort de la fonction ?
 
merci d'avance

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR