[C] - Problema Passaggio Parametri

di il
14 risposte

[C] - Problema Passaggio Parametri

Salve, scusate per il disturbo ma ho un problema..
Ho una funzione di questo genere
void acquisisci(int **primamatrice, int **secondamatrice, int dimensione)
{
     istruzioni
}

ma quando vado a richiamare la funzione in questo modo:
acquisisci(primamatrice, secondamatrice, dimensione);
è come se le matrici contengano solo zeri.

14 Risposte

  • Re: [C] - Problema Passaggio Parametri

    Le matrici sono inizializzate prima di essere passate a acquisisci? Sono matrici statiche o dinamiche? la funzione acquisisci cosa fa con le matrici?
  • Re: [C] - Problema Passaggio Parametri

    Ho preso come esempio un pezzo di codice che già avevi controllato così non ti dò beghe per ricontrollarlo...
    Cmq funziona così:
    (acquisce e stampa le matrici)

    
    void acquisisci(int **matrice1, int **matrice2, int n_rc)  
    {
       int riga1,
          riga2;
       int colonna1,
          colonna2;
          i;                        
       FILE *a,
       *b;
       
       
        printf("Digita il numero ri righe che deve avere la matrice (0 < ) ");
       
       scanf("%d",
             &n_rc);
       
       
       a = fopen("matrice_A.txt", "r");
       b = fopen("matrice_B.txt", "r");
    
    matrice1 = (int**)calloc(n_rc, sizeof(int*));
    
    for(i = 0; i < n_rc; i++)
       matrice1[i] = (int*)calloc(n_rc,sizeof(int));
    
    for(riga1=0; riga1<n_rc; riga1++)
    {
       for(colonna1=0; colonna1<3; colonna1++)
       {
          fscanf(a, "%d", &matrice1[riga1][colonna1]);
       }
    }  
    
    
      for(riga2=0; riga2<n_rc; riga2++)
         for(colonna2=0; colonna2<3; colonna2++)
           fscanf(b, "%d", &matrice2[riga2][colonna2]);
    
       fclose(a);
    /*  fclose(b);*/
    
       for(riga1=0; riga1<n_rc; riga1++)
            for(colonna1=0; colonna1<n_rc; colonna1++)
           printf("%d ", matrice1[riga1][colonna1]);
         printf("\n");
       
    
       printf("\n");
    
      for(riga2=0; riga2<n_rc; riga2++)
           for(colonna2=0; colonna2<n_rc; colonna2++)
           printf("%d ", matrice2[riga2][colonna2]);
         printf("\n");
       
       
    }

    il mio problema sarebbe usare la funzione all'interno di un'altra funzione...
  • Re: [C] - Problema Passaggio Parametri

    Quel pezzo di codice funziona solo se le matrici sono puntatori statici. Altrimenti devi fare in modo di caricare le matrici uno alla volta e come return far tornare la matrice e non il void.
    Una cosa tipo:
    
    int ** acquisisci(int n_rc);
    
  • Re: [C] - Problema Passaggio Parametri

    Quindi dovrei dividere la funzione acquisisci in due funzioni (una per matrice) e ad ognuna come valore di ritorno restituisco **matrice ?
  • Re: [C] - Problema Passaggio Parametri

    È un idea poi ognuno fa come crede. Può essere una soluzione.
  • Re: [C] - Problema Passaggio Parametri

    Ho provato così:
    
    int acquisisci2 (int **matrice2, int errore2, n_rc)
    {
        printf("Digita il numero ri righe che deve avere la matrice (0 < ) ");
       
       scanf("%d",
             &n_rc);
       b = fopen("matrice_B.txt", "r");
    
      for(riga2=0; riga2<n_rc; riga2++)
         for(colonna2=0; colonna2<3; colonna2++)
           fscanf(b, "%d", &matrice2[riga2][colonna2]);
    
     fclose(b);
       
      for(riga2=0; riga2<n_rc; riga2++)
           for(colonna2=0; colonna2<n_rc; colonna2++)
           printf("%d ", matrice2[riga2][colonna2]);
         printf("\n");
       
    }
    return(matrice2, errore2, n_rc)
    
    e per richiamarla
    acquisisci2 (matrice2, errore2, n_rc)
    solito problema... è come se non mi passasse i valori
  • Re: [C] - Problema Passaggio Parametri

    La matrice è dinamica o statica? Se è statica devi passare il puntatore della matrice e non la matrice stessa. Se dinamica lo devi creare dentro la funzione acquisisci e farlo tornare alla funzione chiamante.
    Non puoi fare un esempio completo e postarlo?
  • Re: [C] - Problema Passaggio Parametri

    Questo è il codice per acquisire una matrice, e come avrai capito non capisco cosa c'è che non va nella dichiarazione perchè non riesco a passare quelle benedette matrici e la dimensione...
    int acquisisci1 (int **matrice1, int n_rc)
    {
    	int 	i,
    		j,
    		n_rc;
       	FILE 	*file_matrice1;
    	
    	printf("numero di righe e colonne 0<");
    	scanf("%d", &n_rc);
    
    	file_matrice1 = fopen("matrice_A.txt", "r");
    	matrice1 = (int**)calloc(n_rc, sizeof(int*));
    
    	for(i = 0; i < n_rc; i++)
    		matrice1[i] = (int*)calloc(n_rc,sizeof(int));
    
    	for(i=0; i<n_rc; i++)   /*righe*/
    	{
    		for(j=0; j<n_rc; j++)  /*colonne*/
    		{
    			fscanf(file_matrice1, "%d", &matrice1[i][j]);
    		}
    	} 
    	fclose(file_matrice1);
    
    	
    	for(i=0; i<n_rc; i++) /*righe*/
    	{
    		for(j=0; j<n_rc; j++) /*colonne*/
    			printf("%d ", matrice1[i][j]);
    		printf("\n");
    	}
    	
    	return (matrice1, n_rc);
    }
  • Re: [C] - Problema Passaggio Parametri

    Ecco un esempio di ciò che tu vuoi fare. Rimettilo a posto x farlo funzionare come meglio serve a te.
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void acquisizione(int ***matrice,int n_rc);
    
    int main()
    {
    	int **matrice = NULL;
    	int i = 0;
    	int j = 0;
    	int n_rc = 3;
    	acquisizione(&matrice,n_rc);
    	for(i = 0; i < n_rc; i++)
    	{
    		for(j = 0; j < n_rc; j++)
    		{
    			printf("%d ",matrice[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    
    void acquisizione(int ***matrice,int n_rc)
    {
    	int i = 0;
    	int j = 0;
    
    	*matrice = (int**)malloc(n_rc * sizeof(int*));
    	for(i = 0; i < n_rc; i++)
    		(*matrice)[i] = (int *)malloc(n_rc * sizeof(int));
    
    	for(i = 0; i < n_rc; i++)
    	{
    		for(j = 0; j < n_rc; j++)
    		{
    			(*matrice)[i][j] = i+j;
    		}
    	}
    }
    
  • Re: [C] - Problema Passaggio Parametri

    Ma le mie matrici sono contenute in un file....
    devo usare per forza l' fscanf..
  • Re: [C] - Problema Passaggio Parametri

    sheva7 ha scritto:


    ma le mie matrici sono contenute in un file....
    devo usare per forza l' fscanf..
    Rimettilo a posto x farlo funzionare come meglio serve a te
  • Re: [C] - Problema Passaggio Parametri

    Xkè hai cambiato la calloc con la malloc?
  • Re: [C] - Problema Passaggio Parametri

    Cmq mi dà errore di segmentation fault
  • Re: [C] - Problema Passaggio Parametri

    Questo pezzo di codice
             (*matrice)[i][j] = i+j; 
    all'interno dei due for a che cosa serve?
Devi accedere o registrarti per scrivere nel forum
14 risposte