PDA

Visualizza la versione completa : [C++] Classe razionale e valore delle variabili


Lasentinella
30-12-2007, 21:10
Devo realizzare una struttura "razionale", che contenga numeratore e denominatore:


typedef struct rat Razionale;
struct rat {
int num;
int den;
};


Questa parte crea un razionale:


printf("Scrivi il numeratore del primo numero: ");
scanf("%d",&numeratore);
printf("Scrivi il denominatore del primo numero: ");
scanf("%d",&denominatore);

Razionale razionale1;
razionale1=costruisci(numeratore,denominatore);




Razionale costruisci(int num, int den) {

Razionale rat;
rat.num=num;
rat.den=den;

return rat;
}



Il fatto è che, dopo aver inserito da tastiera i due numeri, alla fine ottengo dei numeri casuali. E' come se, dopo aver eseguito il metodo costruisci (dove viene creato il razionale che voglio), tornando al richiamo del metodo ( razionale1=costruisci(...) ) i valori vengano persi.

Mi viene quindi da chiedermi se è un problema di come ho definito la struttura o qualcos'altro!!

Spero possiate aiutarmi :bhò:

MacApp
31-12-2007, 11:38
Linguaggio C o C++?
Compilatore?
Sistema operativo?
Come fai a vedere il contenuto della variabile razionale1?

Lasentinella
31-12-2007, 14:44
Azzzzzzzz chiedo scusa, non so come ho fatto a dimenticare di specificare quelle cose!! :cry: Dovevo anche scriverlo nel titolo..

linguaggio C, uso DEV C++ in Windows XP.

dopo il richiamo


razionale1=costruisci(numeratore,denominatore);


faccio una printf con razionale1.den e razionale1.num, ottenendo dei numeri che non sono quelli che ho inserito :confused:


printf("Numeratore: %d, denominatore: %d",razionale1.num,razionale1.den);

Il metodo inserisci è in un altro file, ma non penso cambi qualcosa (ho messo l'include tra virgolette e non ricevo errori, perché in effetti il metodo viene richiamato)

MacApp
31-12-2007, 15:32
Il seguente mi produce i risultati attesi, provalo:


//
// Compiled and tested with:
// i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465)
//

#include <stdio.h>
#include <assert.h>

typedef struct rat Razionale;
struct rat {
int num;
int den;
};

static Razionale costruisci(int num, int den) {
Razionale rat;
rat.num=num;
rat.den=den;
return rat;
}

static void DumpRazionale (const Razionale * theRazionale){
assert (NULL != theRazionale);
printf ("theRazionale->num: %d;\n", theRazionale->num);
printf ("theRazionale->den: %d;\n", theRazionale->den);
}

int main (void){
int numeratore, denominatore;
Razionale razionale1;
scanf ("%d", &numeratore);
scanf ("%d", &denominatore);
razionale1=costruisci(numeratore,denominatore);
DumpRazionale (&razionale1);
return 0;
}

Lasentinella
31-12-2007, 17:32
Grazie mille, ora funziona!! :)
Mi sapresti dire come mai hai messo static il metodo costruisci??

MacApp
31-12-2007, 18:38
Originariamente inviato da Lasentinella
Grazie mille, ora funziona!! :)
Mi sapresti dire come mai hai messo static il metodo costruisci??
Perché, nell'esempio, non necessita d'essere visibile ad altri file sorgenti.

Lasentinella
01-01-2008, 12:03
Capito, grazie ancora :)

:ciauz:

Loading