2013-08-12 13 views
9

Non riesco a stampare il valore double utilizzando wsprintf(). Ho provato sprintf() e ha funzionato bene.Come stampare doppio usando wsprintf

sintassi utilizzata per wsprintf() e sprintf() è la seguente:

wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value 

sprintf(str," square is %lf",iSquare); // works okay 

Sto facendo qualche errore durante l'utilizzo wsprintf()?

+0

è 'str' una stringa di caratteri di larghezza? – shf301

+0

Che cos'è 'TEXT'? –

+1

@PascalCuoq: in questo contesto, una macro di Windows (Microsoft) che si espande in 'L'. Piuttosto prolisso e soggetto a errori. – MSalters

risposta

26

wsprintf non supporta il virgola mobile. L'errore sta usando affatto.

Se si desidera qualcosa come sprintf, ma per caratteri larghi/stringhe, si desidera invece swprintf.

In realtà, dal momento che si sta utilizzando la macro TEXT, probabilmente si desidera _stprintf invece però: che sarà passare da una stretta a larga applicazione in sincronia con le stesse macro preprocessore come TEXT utilizza per decidere se la stringa sarà ristretta o largo.

Per quello che vale: wsprintf è quasi interamente una reliquia storica. w corrisponde a Windows. È stato incluso come parte di Windows quando (almeno fino a Windows 2.1, probabilmente Windows 1). È stato scritto senza supporto per virgola mobile perché a quel tempo, Windows non utilizzava alcun punto mobile internamente (del tutto).

+0

Heck, funzionava su alcuni sistemi che non avevano affatto hardware in virgola mobile. Anche Windows 95 supporta 80386 senza un FPU 387. – MSalters

+0

Sì, funziona. Ho usato "_stprintf_s" questo metodo è esattamente quello che voglio. Grazie per l'aiuto. https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx –

-1

Presumibilmente non si è compilati in UNICODE e TEXT è # definito su una stringa normale.

+0

Ho downvoted poiché la risposta era sbagliata. Ma non sembra che tu abbia fatto molti sforzi per scoprire "wsprintf()". – tinman

+1

Hai ragione, non ho cercato wsprintf. Chiaramente OP nemmeno. Ho fatto una supposizione e ho sbagliato; Partirò per i posteri. – mark

2

wsprintf non supporta il virgola mobile. Vedere il relativo documentation - lf non è elencato come un codice di formato valido.

La parte di funzione swprintf della libreria standard di Visual Studio è ciò che si desidera. Supporta tutti i codici di formato che fa sprintf.

2

La funzione wsprintf() non supporta i parametri in virgola mobile, provare a utilizzare swprintf() invece se si lavora con valori in virgola mobile.

Maggiori informazioni su swprint si possono trovare here

Problemi correlati