Newsgroup: it.comp.lang.c++
Titolo: Domanda da un principiante

Buongiorno. Seguo da qualche giorno il newsgrup ed avrei una domanda da
farvi. Ho appena iniziato a lavorare con il C++ Builder della Borland e mi
sono trovato nella situazione di dover inserire un numero random in un campo
di testo. La mia soluzione č stata questa:
.....
#include <stdlib.h>
#include <stdio.h>
.....
char stringa[33];
        ......
        sprintf(stringa,"%X",rand());    //Converto un intero random in una
stringa di testo
        LabeledEdit1->Text=stringa;  //Copio la stringa di testo nel form
        ......
Ovvero ho dovuto utilizzare un vettore di caratteri temporaneo. Ogni mio
tentativo di eseguire l'operazione direttamente senza passare per questo
vettore temporaneo č fallita.
Qualcuno di voi saprebbe dirmi come si fa? Grazie in anticipo...

 vettore temporaneo è fallita.
Forse perché la copia di una C-string non si fa con l'operatore di
assegnazione ma con la funzione strcpy().
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

        LabeledEdit1->Text=stringa;  //Copio la stringa di testo nel form
LabeledEdit1->Text = IntToStr(tuonumero);
Tieni presente che questo vale solo per il BC++B.
Se hai necessità di discutere argomenti inerenti questo particolare
compilatore, rivolgiti a it.comp.programmare.win32.
-- 
Andrea Laforgia
"640kb of memory should be enough for anyone." -- Bill Gates.

 compilatore, rivolgiti a it.comp.programmare.win32.
Ok, la classe appartiene a quel particolare compilatore come dici tu, ma il
mio è un problema più generale, che sto riscontrando in varie funzioni C++
che operano con vari oggetti. Io non riesco ad esempio ad interpretare il
prototipo della versione "C++" di sprintf, che è:
AnsiString& __cdecl sprintf(const char* format, ...);
mentre LabelEdit1->Text dovrebbe essere appunto un tipo AnsiString.
Interpretando il protoripo, io avrei scritto:
LabelEdit1->Text.sprintf("%X",rand());
Non so se sono riuscito a spiegare il mio dubbio, che è più generale di
quello del solo esempio che ho portato (specifico del compilatore). Scusa
comunque l'eventuale [OT], proverò a postare tutto nel news indicato....

 LabelEdit1->Text.sprintf("%X",rand());
No, quel prototipo non indica affatto che sprintf() sia un metodo di
qualche classe della quale Text dovrebbe essere un istanza. E quindi non
puoi chiamarla in quel modo.


 mentre LabelEdit1->Text dovrebbe essere appunto un tipo AnsiString.
Come forse ho gia' detto in un altro gruppo, siccome e' AnsiString
per mettere il numero 7777 basta che fai
LabelEdit1->Text = AnsiString(7777);
controlla gli AnsiString nella documentazione on-line.
Puoi fare anche cose tipo
LabelEdit1->Text = "numero magico = " + AnsiString(42) + " ciao.";
etc.etc.
ciao,
g.

puoi chiamarla in quel modo.
Enrico, sei stato fuorviato dal nostro amico.
Borland C++ Builder č un ottimo compilatore e non andrebbe cambiato.
La sprintf() di cui parla il nostro amico č un _metodo_ della classe
AnsiString.


 AnsiString.
Se lo è, non si evinceva certo dalla dichiarazione riportata che doveva
allora essere qualcosa tipo
AnsiString &AnsiString::sprintf( etc. );
Non sei d'accordo?


Non sei d'accordo?
No, difficile evincere qualcosa se si riporta solo una linea.
L'help di C++ Builder recita precisamente:
AnsiString::sprintf
--------------------------------------------------------------
Sets the value of the AnsiString given a format string and its
arguments.
AnsiString& __cdecl sprintf(const char* format, ...);
Description
Use sprintf to set to the value of the AnsiString given a standard C++
format specifier. Pass the values to any arguments in the format
specifier as additional parameters following the format parameter. 
This method returns a reference to the AnsiString (*this) with the
resulting value.


 AnsiString& __cdecl sprintf(const char* format, ...);
non stai affatto dichiarando un metodo di una classe. Non mi pare ci sia
altro da dire.


altro da dire.
...e dalle...
Nell'help viene già specificato, in alto, che si sta parlando del
metodo "AnsiString::sprintf"...


Si, ma il vero problema è:se uno dovesse usare una funzione del genere, come
deve fare?! In ogni caso, grazie mille dell' interessamento, siete
gentilissimi; da questo newsgroup ho già imparato molte cose nuove.


> AnsiString& __cdecl sprintf(const char* format, ...);
};
ti suona? ti sconfinfera? ti risulta?
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.0. C, C++ and ASM developers
                               and beta testers are welcome!

 ti suona? ti sconfinfera? ti risulta?
Chiaro. Ma dove era scritto che la dichiarazione era all'interno di una
classe? E' la prima volta che lo vedo da quando č iniziato il thread!
Cerchiamo di essere piů precisi per evitare fraintendimenti, ok?


Cerchiamo di essere più precisi per evitare fraintendimenti, ok?
Infatti io ho detto che sei stato "fuorviato" ;-)


 Infatti io ho detto che sei stato "fuorviato" ;-)
Ok, ok, ma io non uso il Borland C++ Builder e quindi non potevo vedere
quella documentazione.
