#include <stdio.h>
#define N 256
int main() {
static char buff[N];
double significant, floatingNumber;
int exponent, i, rc;
printf("floating-point: ");
scanf("%s", buff);
/* analyse floating-point expressio */
{
int i, expsign, sigsign;
rc = 1;
double k;
significant = 0.0;
exponent = 0;
sigsign = 0;
i = 0;
if (buff[i] == 'e')
rc = 0;
/* sign */
if (buff[i] == '-') {
sigsign = 1;
i++;
}
/* before point */
for (; buff[i] && buff[i] != '.'&& buff[i] != 'e' ; i++) {
if (buff[i] >= '0' && buff[i] <= '9') {
significant = significant * 10.0;
significant = significant + (buff[i] - '0');
} else {
rc = 0;
break;
}
}
/* after point */
if (buff[i] == '.') {
i++;
k = 0.1;
for (; buff[i] && buff[i] != 'e'; i++) {
if (buff[i] >= '0' && buff[i] <= '9') {
significant = significant + (k * (buff[i] - '0'));
k = k / 10.0;
} else {
rc = 0;
break;
}
}
}
/* exponential part */
if (buff[i] == 'e') {
i++;
/* non-exponential indication : error */
if (buff[i] == 0)
rc = 0;
expsign = 0;
/* exponential sign */
if (buff[i] == '+') {
i++;
} else if (buff[i] == '-') {
expsign = 1;
i++;
}
/* exponential indication */
for (; buff[i]; i++) {
if (buff[i] >= '0' && buff[i] <= '9') {
exponent = exponent * 10;
exponent = exponent + (buff[i] - '0');
} else {
rc = 0;
break;
}
}
if (expsign > 0)
exponent = exponent * -1;
}
if (sigsign > 0)
significant = significant * -1.0;
}
/* Good: rc = 1, Bad: rc = 0 */
if (rc) {
/* make double */
floatingNumber = significant;
if (exponent > 0) {
for (i = 0; i < exponent; i++)
floatingNumber *= 10.0;
} else if (exponent < 0) {
for (i = 0; i > exponent; --i)
floatingNumber /= 10.0;
}
/* plus one */
floatingNumber = floatingNumber + 1.0;
printf("Floating Number: %f\n", floatingNumber);
} else {
printf("Bad format.\n");
}
return 0;
}
/* end */