oregon ha scritto:
Infatti ti ho indicato il codice di quella funzione non la funzione...
Prova a scriverne una in base agli esempi e dicci cosa non funziona o non capisci. Non so cos'altro suggerirti...
Scusami il ritardo, ma non ho avuto internet in questi giorni di vacanza...
Ma in questi giorni sono arrivato a questa conclusione:
int str_insertion_char(char *d, char *s, int x)
{
char ch1;
char ch2;
char *tmp;
d += x;
while(*s) {
ch1 = *d;
*d++ = *s++;
tmp = d;
while(*tmp) {
ch2 = *tmp;
*tmp++ = ch1;
ch1 = ch2;
}
*tmp++ = ch1;
*tmp = '\0';
}
return 1;
}
int str_reflex(char *d, char *s)
{
char ch;
int i = 0;
int j = str_size(d);
if (*s == '\0') {
--s;
}
while(i < j) {
ch = *d;
*d = *s;
*s = ch;
++d;
--s;
++i;
--j;
}
return 1;
}
int str_int_char(char *s, long int n)
{
char *b = s;
short sg = 0;
if(n < 0) {
n *= -1;
sg = 1;
}
do {
*b++ = (char)((n % 10) + '0');
n /= 10;
}while(n != 0);
*b = '\0';
str_reflex(s, b);
if(sg == 1)
str_insertion_char(s, "-", 0);
return 1;
}
int str_floating_point(char *s, long double fp, int lim, long int size)
{
long int e = fp;
fp -= e;
str_int_char(s, e);
while(*s) {
++s;
}
*s++ = '.';
short bych = 0;
if(size == 4) {
bych = 7;
}
else {
bych = 16;
}
short prec[bych];
short i = 0;
for(; i < bych; i++) {
fp *= 10;
prec[i] = fp;
fp -= prec[i];
printf("prec %d\n", prec[i]);
}
i -= 2;
if(prec[i] >= 5) {
prec[i+1] = prec[i] + 1;
}
else if(prec[i] < 5) {
prec[i+1] = prec[i];
}
i = 0;
if(fp < 0) {
fp *= -1;
}
while(lim > 1) {
*s++ = (char)(prec[i] + '0');
--lim;
++i;
}
*s++ = (char)(prec[bych - 1] + '0');
*s = '\0';
return 1;
}
Quindi chiedo; esiste un modo per accedere direttamente alla struttura float o double?
Perché, da quanto ho capito, i numeri in virgola mobile sono strutturati con un esponente e una matissa, tipo:
struct _FLOAT {
unsigned s : 1;
unsigned e : 8;
unsigned m : 23;
}
Questo è quanto ho imparato io... poi, ogni suggerimento, mi sarà utile!!