Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] funzione che restituisce una struttura

    ciao ho un problema che devo risolvere ; sto studiando una funzione che restituisce una struttura ;

    ho scritto il codice

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    typedef struct  {
    	int b ;
    	int d ;
    } punto ;
    
    struct punto ins (  int n , int m ) ;
    
    int main ()
    
    { 
    	punto punto ;
    	int g = 10 ;
    	int e = 20 ;
    
    	ins (g , e ) ;
    	printf ( "%d%d" , ins (g , e ) ) ;
    
    	system ("PAUSE") ;
    	return 0 ;
    }
    
    
    struct  punto ins (  int n , int m )
    {
    	punto.b = n ;
    	punto.d = m ;
    	return punto ;
    }

    il codice mi da diversi errori , ma il principale è che la funzione "ins" non restituisce nulla?
    perchè?

    grazie

  2. #2
    Quanti errori... vediamo se riusciamo a venirne fuori.
    Nella funzione ins... cosa rappresenta punto.b o punto.d?
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  3. #3

    Re: [C] funzione che restituisce una struttura

    ci vedo un pò di errori

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    typedef struct  p {
    	int b ;
    	int d ;
    } punto ;
    corretto, l'uso è typedf struct <nomestruct>{ <dati>} <nometipo>;

    codice:
    punto ins (  int n , int m ) ;
    corretto, punto è un tipo ora, non devi specificare struct prima (anche perchè non ha senso)

    codice:
    int main ()
    
    { 
    	punto punto1 ; //<--- non puoi usare stesso nome per un tipo e una variabile
    	int g = 10 ;
    	int e = 20 ;
    
    	punto1 = ins (g , e ) ; //<--- mancava l'assegnazione ._.
    	// printf ( "%d%d" , ins (g , e ) ) ; //<-- questo non ha senso
           printf("%d%d", punto1.b, punto1.d);
    
    	system ("PAUSE") ;
    	return 0 ;
    }
    
    
    punto ins (  int n , int m ) //<-- il tipo di ritorno è punto, struct punto non ha senso
    {
           
            /* NO! cos'è punto!? è un tipo, quindi devi definire una variabile relativa a quel tipo
    	punto.b = n ; 
    	punto.d = m ;
            */
    
            punto punto1;
    	punto1.b = n ; 
    	punto1.d = m ;
    	return punto1;
    }
    a mio parere stai facendo molta molta molta confusione tra struct, tipi, ritorni e uso della printf

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Non fare confusione: il tuo tipo strutturato è "punto", non "struct punto" o altro (questo perché hai utilizzato la typedef); tanto per cominciare quindi la tua funzione dovrebbe avere "punto" come tipo del valore di ritorno, e non "struct punto". Poi, in main() non puoi dichiarare una struttura con nome "punto" in quanto questa parola è già utilizzata per definire il tipo della struttura... sarebbe come definire una variabile di tipo int con nome proprio "int"... inoltre, all'interno della funzione devi dichiarare una struttura locale (ad esempio, "punto1") ed utilizzare quella per le assegnazioni, senza contare poi che non puoi utilizzare la printf() in quel modo dato che la funzione ins() ti restituisce una struttura "punto" e non due interi (non potrebbe nemmeno, pur volendo).
    every day above ground is a good one

  5. #5

    Re: Re: [C] funzione che restituisce una struttura

    Originariamente inviato da Celebron
    ci vedo un pò di errori

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    typedef struct  p {
    	int b ;
    	int d ;
    } punto ;
    corretto, l'uso è typedf struct <nomestruct>{ <dati>} <nometipo>;
    in un compito d'esame c'era la dichiarazione

    codice:
    typedef struct {
    char nome [11] ;
    int resi ;
    } oggetto ;
    dunque usare la typedef in questo modo è sbagliato?



    codice:
    int main ()
    
    { 
    	punto punto1 ; //<--- non puoi usare stesso nome per un tipo e una variabile
    	int g = 10 ;
    	int e = 20 ;
    
    	punto1 = ins (g , e ) ; //<--- mancava l'assegnazione ._.
    	// printf ( "%d%d" , ins (g , e ) ) ; //<-- questo non ha senso
           printf("%d%d", punto1.b, punto1.d);
    
    	system ("PAUSE") ;
    	return 0 ;
    }
    
    
    punto ins (  int n , int m ) //<-- il tipo di ritorno è punto, struct punto non ha senso
    {
           
            /* NO! cos'è punto!? è un tipo, quindi devi definire una variabile relativa a quel tipo
    	punto.b = n ; 
    	punto.d = m ;
            */
    
            punto punto1;
    	punto1.b = n ; 
    	punto1.d = m ;
    	return punto1;
    }
    a mio parere stai facendo molta molta molta confusione tra struct, tipi, ritorni e uso della printf

    grazie in effetti un po si ;
    adesso ho chiarito meglio questi concetti , grazie!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: Re: Re: [C] funzione che restituisce una struttura

    Originariamente inviato da toni00c
    dunque usare la typedef in questo modo è sbagliato?
    No, ma se usi la typedef in quel modo la struct rimane anonima e l'unico tipo di dato è quello che specifichi con la typedef. Per intenderci, se scrivi

    codice:
    typedef struct {
    char nome [11] ;
    int resi ;
    } oggetto ;
    l'unico modo che hai per riferirti a quel tipo struttura è attaverso "oggetto", questo perché in pratica stai dichiarando un tipo strutturato anonimo (in quanto dopo la keyword "struct" non c'è alcun nome ma direttamente la sua definizione) per poi ridefinirlo utilizzando la typedef. Se invece avessi scritto una cosa come

    codice:
    typedef struct _oggetto {
    char nome [11];
    int resi ;
    } oggetto;
    allora avresti potuto riferiti al tipo strutturato sia con "struct _oggetto" che con "oggetto", in quanto in questo caso si definisce non solo il tipo "oggetto" con la typedef ma anche il tipo "struct _oggetto", dato che è stato assegnato un nome alla struct.
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.