Newsgroup: it.comp.lang.c++
Titolo: (niubbo) Istruzione printf

Ho questa istruzione
printf("\n posizione baricentro: %5.2f massa totale: %5.2f", X, M);
Non riesco a capire cosa voglia dire il %5.2f
per stampare un float non dovrebbe essere %f?
grazie a chiunque mi aiuti.
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
www.nicolaottomano.it

 Non riesco a capire cosa voglia dire il %5.2f
http://www.cplusplus.com/ref/cstdio/printf.html

grazie x l'aiuto.
Dimmi se ho capito bene:
%5.2f vuol dire che stampa 5 caratteri decimali? (l'esempio sulla pagina che
mi hai dato fa %4.2f e stampa 3.1416 quindi 4 cifre decimali)
bye


 per stampare un float non dovrebbe essere %f?
Facendo le "pulci", sei OT.
-- 
Luc

 mi hai dato fa %4.2f e stampa 3.1416 quindi 4 cifre decimali)
veramente l'esempio nella pagina che ti ho segnalato esegue
questa istruzione :
printf ("floats: %4.2f  ......
e stampa 2 cifre dopo la virgola, non 4. Infatti sotto (nell'output)
e' riportata la linea :
floats: 3.14 ....
In generale (e a differenza di quello che ti hanno detto)
%5.2f  non stampa 5 cifre "intere" e 2 decimali, ma stampa
un numero che occupa complessivamente 5 posizioni(contando anche il
punto decimale) delle quali 2 sono le cifre dopo la virgola.
ciao,
g.


piu' che altro poteva evitare il crosspost, ma non
mi sembra che la printf sia proprio OT visto che si puo' usare
tranquillamente anche nel c++ includendo opportuno header.
E in ogni caso se non conosce bene la printf non puo' sapere
se e' OT o no, e quindi potevi spiegare perche', secondo te,
e' OT.
ciao,
g.

> piu' che altro poteva evitare il crosspost,
si, scusate, ma domani ho un esame e purtroppo il significato di questa
espressione non è spiegato nè sul libro, ne dal prof (che tralaltro è
irreperibile).
Comunque, rispondendo a Luc,  non credo di essere OT.
bye


ok ho capito.
però mi sorge un dubbio: e se esce un numero con maggiori cifre intere?
cioè se scrivo %3.2f e il numero è 122.33?
da errore?


 da errore?
non so darti una risposta generale.
Con tutti i compilatori che ho usato io non dava errore e stampava
il numero nella sua interezza, sforando sul numero di cifre prima
della virgola. Naturalmente se hai usato la formattazione
per stampare tanti bei numerini incolonnati la tua incolonnatura
va a farsi benedire.
Di solito si puo' prevedere quante cifre al massimo uno
dovra' stampare. Nel caso i numeri svariassero molto
si puo' usare  un formato scientifico, che occupa piu' spazio,
ma usando la notazione esponenziale permette di specificare
bene quante cifre significative uno vuole. Alternativamente
uno si definisce una propria routine di formattazione
che, per esempio, se ci sono troppe cifre prima della virgola
allora "mangia" qualche cifra dopo la virgola per guadagnare posto.
Comunque se devi continuare a usare il C o il C++ e' meglio
che ti compri un testo piu' esaustivo....
ciao,
g.

 che ti compri un testo piu' esaustivo....
ne ho 2, ma uno parla solo della cout (che ho sempre usato alle superiori).
Ora all'università usiamo un altro libro che parla solo della printf ed è
spiegata malissimo.
Grazie mille per l'aiuto.
Dovessi (tu) avere problemi in VB fai un salto su ICLVB.
In VB riesco meglio del C.



wrote:

#include <cstdio>
int main(int argc, char** argv)
{
	printf("sono un programma c++ e quindi in topic");
}
-- 
]\/[ad]\/[age (
www.mindreamz.net
)
"Un Maestro insegue semplicemente la sua visione di Eccellenza in
qualunque cosa sta facendo e lascia agli altri decidere se sta 
lavorando o giocando. A lui sembra sempre di fare entrambe." - Anonimo

LOL


 }
A essere pignoli ci sarebbe un errore in questo frammento di codice.
Max

 A essere pignoli ci sarebbe un errore in questo frammento di codice.
A parte che l'indentazione è importante,
mi manca una return (qualcosa).
SiMoStro

#include <cstdio>
int main(int argc, char** argv)
{
	printf("sono un programma c++ e quindi in topic\n");
	printf("adesso sono pure corretto\n");
	return 0;


mi manca una return (qualcosa).
   AFAIK non e` obbligatorio in main, secondo lo standard.
-- 
S.L.

 
'return' non è obbligatorio nel 'main'. Non è a quello che mi riferivo.
'#include <cstdio>' dichiara i nomi nel namespace 'std', quindi a rigori 
dovremmo usare 'std::printf', ma credo che la forma non qualificata di 
fatto funzioni con molti compilatori.
Max

 }
Il return si puo' omettere e continui ad essere sbagliato. E si
[aiutino] che hai pure scritto "cstdio"...
Ciao,
Nicola

 fatto funzioni con molti compilatori.
Premetto che non sono un "purista e profondo conoscitore del C++" :-)
Ho letto "pezzi sparsi" dell'ISO/IEC 14882 - giusto per curiosità,
spesso mi capita di andare a vedere le cose solo quando mi accorgo
di non saperle :-D - e riguardo al main in effetti si dice che:
"qualora mancasse la prevista istruzione return una 'return 0' viene
automaticamente inserita nel programma"
mentre riguardo alle inclusioni degli header C si dice che:
"ogni header C il cui nome è del tipo 'nome.h' si comporta come se ogni
nome posto nel namespace della libreria Standard del corrispondente
header 'cnome' fosse posto anche nel namespace std e fosse seguito
da una esplicita dichiarazione using".
Parrebbe dunque che entrambe le "dimenticanze" - return e std:: - dal
punto di vista dello standard siano, come dire, accettabili...?
A proposito, esiste ina versione più recente di quella
del 1988 dell'ISO/IEC 14882?
SiMoStro

 punto di vista dello standard siano, come dire, accettabili...?
si, se scrivi:
#include<stdio.h>
int main()
{
   printf("tommy");
   return 0;
}
va bene quello che dici, ma tu hai scritto <cstdio> e NON <stdio.h> e quindi
devi usare std::printf.
Il fatto pero' che il 99% dei compilatori accetti anche printf (senza std::)
rende questo errore a mio avviso talmente piccolo che potevano pure evitare
di fartelo notare.
Per maggiori dettagli consulta lo stroustrup nella sezione sui namespaces.
Tommy

 Per maggiori dettagli consulta lo stroustrup nella sezione sui namespaces.
Non ci crederai ma il mio Stroustrup è la seconda edizione, non ha
i namespace :-)
appena ho i soldi compro la nuova versione...
(esiste in PS o PDF in rete? :-X)
SiMoStro

 (esiste in PS o PDF in rete? :-X)
esistera' sicuramente ma non e' corretto e poi non e' nemmeno la stessa
cosa...
Tommy

 in effetti errori?
allora... facciamo chiarezza:
1-
"accettate dalla maggior parte dei compilatori" != "non sono errore"
2-
Il return nel main (SOLO nel mail!) PUO' essere omesso.
3-
se usi <cstdio> DEVI usare std::printf() o rendere visibile la printf
nel namespace globale
(in pratica scrivere prima "using std::printf;" o "using namespace std;")
altrimenti E' un errore, a prescindere da cosa dicano la maggior parte
dei compilatori.
-- 
Gerolamo
www.overweb.it

 dei compilatori.
Si si, sono d'accordo su tutto, volevo solo discutere
su "ciò che si fa tutti i giorni" e cosa si trovare
invece sull'ISO/IEC 14882 (che beninteso, non leggo
MAI :-)
In particolare sul main il 3.6.1_5 è assai chiaro,
dunque c'è poco da dire.
Sull'uso delle librerie C - che per altro sono ovviamente
deprecate - D.5 riporta:
"... is also placed within the namespace scope of
the namespace std and is followed by an explicit
using-declaration..."
quindi è identico al discorso che hai fatto tu sull'uso
di std:: (che concordissimo!), quello che mi dà da pensare
- ma neanche poi più di tanto :-) - è quell "followed by
an explicit using-declaration" che pare rendere visibile
tutto senza 'using namespace' o scope resolution.
Tutto qui :)
SiMoStro

 tutto senza 'using namespace' o scope resolution.
Questo vale se si usa la forma <NAME.h>'. Con la forma <cNAME> (che è
l'argomento di questo pezzo di thread), tutto è collocato nel namespace 'std'.
   [Example: The header <cstdlib> provides its declarations  and  defini-
   tions  within  the  namespace  std.  The header <stdlib.h> makes these
   available in the global name space, much as in the C Standard.   --end
   example]
Max

    example]
In effetti "ravanando" un po' in giro ho trovato
in rete delle pagine che "in breve" ripropongono
questa stessa differenza evidenziando il fatto che
le cname 'sfociano' in std, gli altri headers hanno
un comportamento C-like ("much as in the C standard")
Tutto sommato dire che è decisamente coerente.
Grazie. :-)
SiMoStro

 (esiste in PS o PDF in rete? :-X)
Spero proprio di no. L'editoria informatica di qualita' versa gia' in
condizioni pessime e ci manca solo che la gente si metta a rubare
libri.
Ciao,
Nicola

 libri.
Beh, precisiamo, personalmente non ho l'abitudine di
"rubare" niente;
possiedo una vecchia versione del libro in esame dai
tempi in cui programmavo C++ su un 386SX con il compilatore
"turbo" della Borland ed Internet era un lusso...
ho comprato - non rubato - svariati libri di prezzo
superiore agli 80, 90 euro e se "per caso" esistesse
una versione in rete di tipo... diciamo "upgrade" delle
vecchie edizioni non mi sentirei ladro a possederne la
versione PDF di quei due, forse tre capitoli che mi mancano
dalla mia versione del libro del '93, ormai lisa.
Spesso accade che molti scrittori rilascino in rete i capitoli
"aggiunti" dei vecchi libri (accade per certe pubblicazioni
della Addison Wesley).
Tutto qui.
Ti immagini - a parte che ormai non c'è più... - se della "serie"
dello Stevens sul TCP/IP e la programmazione Unix (che in tutto
sono sei libri del valore medio di 70 euro) dovessi spendere ogni
due/tre anni 420 euro per avere "qualche capitolo in più"?
Non accade purtroppo, ma per chi possiede "libri di qualità" comprati
miaspetterei un diverso trattamento dall'"editoria di qualità"...
Si potrebbe aprire un discorso "analogo" per l'industria discografica
e cominciare col "giurare di non aver mai scaricato un MP3", ma non
è questo il luogo :-)
SiMoStro

#include <cstdio>
using std::printf;
int main(int argc, char** argv)
{
	printf("sono un programma c++ e quindi in topic\n");
 	printf("adesso sono pure corretto\n");
	return 0;
}
io, comunque, vi inviterei a riflettere sulla lunghezza di questo
thread... mentre io rifletterò sul fatto che ho dovuto riscrivere 3
volte lo stesso programmino di 3 righe per farlo essere corretto


 miaspetterei un diverso trattamento dall'"editoria di qualità"...
Il problema e' che realizzare questi libri costa e che il loro mercato
e' ristretto. In piu' i vari Amazon, B&N, ecc. rosicchiano i margini
per poter fare le loro promozioni.
Ciao,
Nicola

 una rarita'.
Indubbiamente, ma non si può *pretendere* che non accadano certe cose.
Quello che voglio dire è: "fotocopiare" un libro è sbagliato, scaricarsi
versioni in PDF non autorizzate di libri è sbagliato, tant'è però il
mondo è cambiato e oggi queste cose "possono" succedere.
Nel merito, la mia era solo una constatazione del fatto che battere
i pugni sul tavolo (come fanno le case discografiche per gli MP3 o
gli editori per le fotocopie) non serve a nulla, forse potrebbe
servire un'impostazione più "moderna" del concetto di libro, nella
fattispecie proporre a chi ha un libro originale, servizi che premiano
l'acquisto.
Probabilmente a loro converrebbe di più vendere un milione di copie
di un libro alla sua edizione X e rilasciare, magari solo per l'edizione
seguente, un "upgrade" gratuito per gli acquirenti che non vendere
300mila copie alla prima versione e 400mila alla seconda per poi
vedere circolare altrettante versioni "fotocopia".
Quante fotocopie dello Stroustrup ho visto circolare in facoltà...
Poi, per ciò che "è stato aggiunto" al libro in esame, posso anche
apprenderlo gratuitamente - e lecitamente - in rete.
Era solo una questione di "completezza"; ti ripeto, credo di essere
uno di quei pochi "scemi" che ha comprato quasi tutti i libri dei
corsi che ha seguito (per i corsi che non mi interessavano - tipo
fisica tecnica! - mi sono fatto bastare appunti presi dalle lezioni
da gente più veloce a scrivere di me :-), amo avere libri originali e
soprattutto libri "qualificati"... libri che, concedimelo, a volte
costano davvero un po' troppo...
Ciao
SiMoStro

 costano davvero un po' troppo...
La special edition su amazon riesci a comprarla a circa 40 euro.
La 3a edizione usata, in ottime condizioni (pare), la trovi a meno di 20
euro.
Detto questo, ultimamente secondo me i libri hanno prezzi giusti.
Conta che scrivere un libro richiede tempo (e quindi denaro), poi stamparlo,
distribuirlo etc... A mio avviso 40 euro e' un buon prezzo. Sarebbe ridicolo
vedere un libro simile venduto a 15 euro.
Ad esempio, la seconda edizione del C.L.R. (2001) (di cui parlavo prima)
costa meno di 45 euro. E' un libro immortale di 1184 pagine!
Tommy

 euro.
40euro sono 77.000 lire, io ci faccio pranzo
e cena per una settimana (non comprando le
cose già preparate che costano un capitale)
facendo la spesa al supermercato.
Sono troppo; il fatto di "essersi abituati"
non fa di un prezzo un "giusto prezzo".
Comunque i libri specialistici, indubbiamente,
costano di più dei libri "normali" (romanzi,
alcuni saggi...), vabbè me ne faccio una ragione;
prezzi comunque più coerenti di quelli della musica...
SiMoStro

 prezzi comunque più coerenti di quelli della musica...
Potreste tornare a parlare di C++ ?

 Potreste tornare a parlare di C++ ?
Scusa, č che a volte non č
facile spiegarsi in un post solo.
Vabbé, dai, si parlava principalmente
dello Stroustrup che non č OT...
Torno nei ranghi :-(
SiMoStro

 prezzi comunque più coerenti di quelli della musica...
Anche perche' BS prendera' qualche decina di migliaia di Euro per
l'intero libro, non per un singolo concerto!
Ciao,
Nicola