PDA

View Full Version : [C] Inserire numeri in una stringa


giovandrea
12-08-2013, 09:15
Ciao a tutti, ho un piccolo problema con un esercizio.
Mi viene chiesto di scrivere una funzione che riceve in ingresso un numero reale e lo memorizza in una stringa, punto compreso. Passo alla funzione il float ma poi non riesco a capire come farglielo memorizzare in una stringa. Sapete darmi una mano?
Grazie :D

giovandrea
12-08-2013, 09:54
Grazie per la risposta, ma lo dovrei svolgere senza utilizzare funzioni di libreria particolari.
Quello che non capisco è che se inserisco un intero va bene, con un reale mi mostra 0.0000 e non il numero che gli ho passato :muro:

xemf
12-08-2013, 11:38
hai provato ad usare i double?

giovandrea
12-08-2013, 12:06
Provato, è sempre uguale.
Sicuramente ci deve essere qualche cosa che mi sfugge nel codice / che non capisco.
Voi come lo fareste?

Eduadie
12-08-2013, 12:42
Ho preparato un esercizio simile per il mio esame.
Ma se posti il codice che hai fatto fino ad ora non è meglio? Possiamo aiutarti di più. La soluzione più facile che mi viene in mente comunque è lo strcpy()...
Altrimenti un altro metodo potrebbe esserci però meglio che posti il codice...

giovandrea
12-08-2013, 15:38
Premettendo che sono una vera schiappa, questo è il codice che ho scritto io:

#define DIM 10

void stamp (float);

int main()
{
char str[DIM];
int i;
double f;
int a[DIM];
scanf ("%f", &f);
stamp(f);
return 0;
}

void stamp (float n) {

char str[DIM];
str[0]=n;
printf ("\n%f", *str);
printf ("\n%f", str);
return;
}

Ho provato ad inserire diverse formattazioni.
@Antonio23: ci provo e ti faccio sapere

[EDIT]= non capisco quello '0'

xemf
12-08-2013, 15:51
Printf("\n%f",str) ?

Visto che str è tipo char[]
Non andrebbe printf("\n %s",str) ?

giovandrea
12-08-2013, 15:59
@xemf: se metto %s mi stampa caratteri a caso.
Credo che il problema sia proprio nella semantica, ma non ne riesco a venire a capo.
@Antonio23: si, ricordo per la tavola ASCII. Però non mi serve a molto per salvarmi il numero in una stringa, o sbaglio?

xemf
12-08-2013, 16:27
Premettendo che sono una vera schiappa, questo è il codice che ho scritto io:

#define DIM 10

void stamp (float);

int main()
{
char str[DIM];
int i;
double f;
int a[DIM];
scanf ("%f", &f);
stamp(f);
return 0;
}

void stamp (float n) {

char str[DIM];
str[0]=n;
printf ("\n%f", *str);
printf ("\n%f", str);
return;
}

Ho provato ad inserire diverse formattazioni.
@Antonio23: ci provo e ti faccio sapere

[EDIT]= non capisco quello '0'
Occhio che stai facendo un cast implicito da double a float, sistema usando lo stessi tipo che male non fa ;)
@xemf: se metto %s mi stampa caratteri a caso.

Credo che il problema sia proprio nella semantica, ma non ne riesco a venire a capo.
@Antonio23: si, ricordo per la tavola ASCII. Però non mi serve a molto per salvarmi il numero in una stringa, o sbaglio?
Ti stampa i caratteri relativi al numero che hai salvato nella stringa, ti serve convertire dalla tavola ASCII
se '0' vale X
'1' vale X+1
'2' vale X+2
etc.

tu vuoi salvare il tuo numero nella stringa, per cui hai bisogno di quel X per fare la conversione..
Q8

giovandrea
12-08-2013, 17:12
Grazie delle risposte :sofico:
Ma... non riesco ancora a capire la logica. :muro: :muro: :muro: :muro: :muro:
Cioè, ci sono da stamattina e ci sto uscendo matto, lo so che è una stupidata.

Quindi, passo il float alla funzione, la funzione fa una serie di calcoli (perchè proprio quelli?) prima domanda.
e.g. 1457 è il tuo intero, che può essere la parte intera o frazionaria

(1457 - (1457/10) *10) + '0' dove (1457/10) è vista come divisione intera, e iteri il procedimento per tutte le cifre...

@xemf: quel double/float l'ho dimenticato :D

xemf
12-08-2013, 17:44
XD capita....