PDA

Visualizza la versione completa : usare sprintf


Magi13
09-11-2012, 13:13
ciao a tutti,
sto cercando di capire come funziona la sprintf, ma mi viene qualche dubbio.

dovrei scrivere un programma che poi interagisce con un database sqlite, ma ho solo 3 operazioni da fare

inserire, leggere, cancellare

quindi pensavo di utilizzare 3 stringhe predefinite a cui dare solo i valori in input
molto probabilmente dovrei usare anche un allocazione dinamica per le stringhe, ma al momento non è questo il problema

il programma funziona unca cosa che non capisco perchè assegna un valore sbagliato ad un float che è prefissato
il codice è questo



#include <stdio.h>
#include <sqlite3.h>

main()
{
sqlite3* db;
sqlite3_stmt* result;
int i,sel,id,test;
char app[20]="nome";
char delete[80];
char read[25]="SELECT * FROM Agenda";
char insert[150];
float created;


id=1;
created=234567.542;

printf("Quale operazione vuoi eseguire? \n");
printf("1-Inserisci nuovi impegni \n");
printf("2-Leggi gli impegni \n");
printf("3-Cancella impegni \n");

scanf("%d",&sel);

if(sel==1)
{
test=sprintf(insert,"INSERT INTO Agenda Values( %d,%s,%f,0,3) \n",id,app,created);
printf("%s",insert);
}
else if(sel==2)
printf("%s \n",read);
else
{
scanf("%d",&i);
test=sprintf(delete,"DELETE FROM Agenda Where id = %d \n",i);
printf("%s",delete);
}

}



e al posto di created che dovrebbe essere 234567.542 mi stampa il valore 234567.546875
da che dipende??

Who am I
09-11-2012, 14:04
Usa un double invece che un float, la precisione è limitata, non è possibile rappresentare con esattezza certi numeri con un numero limitato di bit.

Ma cosa non hai capito della sprintf?

oregon
09-11-2012, 14:07
Utilizza un double e non un float

Magi13
09-11-2012, 15:01
Originariamente inviato da Who am I
Usa un double invece che un float, la precisione è limitata, non è possibile rappresentare con esattezza certi numeri con un numero limitato di bit.

Ma cosa non hai capito della sprintf?

mentre scrivevo mi sono reso conto dell'errore che commettevo ^^
avevo fatto


stringa=sprintf(insert,"Insert to agenda values....");


e mi dava errore, poi ho visto meglio la documentazione e ho capito il perchè
il risultato doveva essere un intero e questa era la causa del problema, poi andando ad eseguire mi ha dato l'errore quando stampava created
ora è tutto risolto grazie ad entrambi :-)

Loading