C arrugginito ?

Riflessioni, eventi, curiosità

C arrugginito ?

Messaggioda peterray » mer dic 08, 2004 8:29 pm

Ciao !
Probabilmente sono io che sono molto arrugginito con il C, ma non capisco perchè
printf("%f\n", 3/2);
oppure
printf("%f\n", 1.5);
mi stampa solo il newline !
E in generale non sono riuscito a stampare una variabile float o double.
mentre se eseguo
printf("%d\n", 3/2);
mi stampa 1 (giustamente convertendo in intero)
Sul manuale di C che consulto non ho trovato niente di illuminante.

Scusate se sono ancora a questo livello, ma abbiate pietà !

Grazie
Gabriele
In a world without walls and fences
we won't need windows and gates
Avatar utente
peterray

Veterano
 
Messaggi: 355
Iscritto il: ven ott 01, 2004 3:02 pm
Località: Verona

Messaggioda NubeCheCorre » mer dic 08, 2004 8:40 pm

ciao allora se non sbaglio dovrebbe essere qualcosa tipo

printf("%.2f\n", 3.446); e ti visualizza 3.45 avendo 2 cifre di precisione dopo la virgola e quindi arrotondando a 3,45

forse tu non mettendo il punto non specifichi la specifica di conversione ( scusa il gioco di parole ) che sarebbe f.

Poi se prima di f indichi quante cifre visualizzare dopo la virgola lui ti mostra appunto una due o piu' cifre dopo la virgola.

Invece se non metti niente usa quella di default che e' di 6 cifre..

Il problema cmq penso che risieda nel punto omesso..

Spero di averti aiutato

Ciao :felice:
Avatar utente
NubeCheCorre

Leggenda
 
Messaggi: 10624
Iscritto il: dom set 21, 2003 9:21 pm
Località: San remo

Messaggioda peterray » mer dic 08, 2004 8:53 pm

NubeCheCorre ha scritto:ciao allora se non sbaglio dovrebbe essere qualcosa tipo

printf("%.2f\n", 3.446); e ti visualizza 3.45 avendo 2 cifre di precisione dopo la virgola e quindi arrotondando a 3,45


Ehm...
Ho copiato e incollato il tuo printf e il risultato è sempre lo stesso !!
:triste:
C'è qualcosa che non va nel gcc dell'SDK ?
La versione che uso è gcc (GCC) 3.4.2 (Amiga, Inc. build 20040910)

Ciao
Gabriele
In a world without walls and fences
we won't need windows and gates
Avatar utente
peterray

Veterano
 
Messaggi: 355
Iscritto il: ven ott 01, 2004 3:02 pm
Località: Verona

Messaggioda NubeCheCorre » mer dic 08, 2004 9:38 pm

mmm.. e' strano.. dovrebbe essere giusto.. putroppo adesso son senza amiga e non posso provare xche' sul pc di mio fratello non ho compilatori installati.. pero'...

Puoi incollare tutto il tuo sorgente che usi ? :riflette:
Avatar utente
NubeCheCorre

Leggenda
 
Messaggi: 10624
Iscritto il: dom set 21, 2003 9:21 pm
Località: San remo

Messaggioda afxgroup » mer dic 08, 2004 10:20 pm

NubeCheCorre ha scritto:mmm.. e' strano.. dovrebbe essere giusto.. putroppo adesso son senza amiga e non posso provare xche' sul pc di mio fratello non ho compilatori installati.. pero'...

Puoi incollare tutto il tuo sorgente che usi ? :riflette:


Guardate qui: http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=7126&forum=15#92344
Elf.library.. a noi due....
The BUG Hunter.. +1..
AMIGAONE - SAM - MOANA - A1200 - A600 - A500 - C64
Avatar utente
afxgroup

Admin
 
Messaggi: 3647
Iscritto il: ven giu 11, 2004 9:49 am
Località: Taranto

Re: C arrugginito ?

Messaggioda Fab0569 » gio dic 09, 2004 10:58 am

peterray ha scritto:Ciao !
Probabilmente sono io che sono molto arrugginito con il C, ma non capisco perchè
printf("%f\n", 3/2);
oppure
printf("%f\n", 1.5);
mi stampa solo il newline !
E in generale non sono riuscito a stampare una variabile float o double.
mentre se eseguo
printf("%d\n", 3/2);
mi stampa 1 (giustamente convertendo in intero)
Sul manuale di C che consulto non ho trovato niente di illuminante.

Scusate se sono ancora a questo livello, ma abbiate pietà !

Grazie
Gabriele


Dovrebbe essere:
Codice: Seleziona tutto
  printf("%f\n", 3.0/2.0);

I valori float o double vanno sempre specificati con il separatore decimale.
Questo vale anche quando fai le operazioni in virgola mobile.
Per esempio:
Codice: Seleziona tutto
  float var1, var2;

  var2 = var1 / 35.0;
Avatar utente
Fab0569

Maestro
 
Messaggi: 382
Iscritto il: mar ago 26, 2003 11:01 am
Località: Chieti

Messaggioda peterray » gio dic 09, 2004 11:52 am



Letto. Interessante. Stasera provo ad aggiungere l'opzione -lm alla linea di compilazione del gcc.

Grazie e ciao
Gabriele
In a world without walls and fences
we won't need windows and gates
Avatar utente
peterray

Veterano
 
Messaggi: 355
Iscritto il: ven ott 01, 2004 3:02 pm
Località: Verona

Messaggioda moly » gio dic 09, 2004 3:01 pm

Al contrario di quanto ho letto nel thread di AW, il mancato print c'è l'ho pure per i float32...ma con l'opzione -lm suggerita dal mostruoso amidog tutto si risolve :felice: .
No matter how many planets and stars are reflected in a lake

No matter how many universes there are

Franco Battiato - The Game is Over
Avatar utente
moly

Eroe
 
Messaggi: 900
Iscritto il: mer nov 26, 2003 10:17 pm
Località: Cesenatico.tmp (FC)

Messaggioda peterray » gio dic 09, 2004 9:49 pm

peterray ha scritto:Letto. Interessante. Stasera provo ad aggiungere l'opzione -lm alla linea di compilazione del gcc.

Confermo. L'opzione -lm ha risolto il problema, ma SOLO se messa come ULTIMA nella linea di comando !!

Ciao
Gabriele
In a world without walls and fences
we won't need windows and gates
Avatar utente
peterray

Veterano
 
Messaggi: 355
Iscritto il: ven ott 01, 2004 3:02 pm
Località: Verona

Messaggioda riko » sab dic 11, 2004 5:38 pm

peterray ha scritto:
peterray ha scritto:Letto. Interessante. Stasera provo ad aggiungere l'opzione -lm alla linea di compilazione del gcc.

Confermo. L'opzione -lm ha risolto il problema, ma SOLO se messa come ULTIMA nella linea di comando !!


In realta` -lm indica solo che l'eseguibile deve essere linkato con la libreria matematica. E per stampare float non dovrebbe essere necessario (non su nessuna altra piattaforma su cui ho lavorato con il gcc).
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda moly » sab dic 11, 2004 7:50 pm

Infatti...comunque compilando con il g++ il problema non sussiste.
No matter how many planets and stars are reflected in a lake

No matter how many universes there are

Franco Battiato - The Game is Over
Avatar utente
moly

Eroe
 
Messaggi: 900
Iscritto il: mer nov 26, 2003 10:17 pm
Località: Cesenatico.tmp (FC)

Messaggioda riko » sab dic 11, 2004 11:22 pm

moly ha scritto:Infatti...comunque compilando con il g++ il problema non sussiste.


La prima cosa che mi potrebbe venire in mente e` che g++ (che rispetto a gcc e` come se includesse -lstdc++ -- se ricordo bene la parolina -- ) abbia anche 'embeddato' l'inclusione di m nella libreria standard del c++.
Cosa che peraltro mi pare strana... o meglio, su GNU/Linux non e` cosi`.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City


Torna a Amiga in generale

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti