需要注意的点:
- 指数 e \mathrm{e} e前面必须有数字,后面只能为有符号或无符号整数;
- 浮点数小数点不能超过一个,小数点后面必须为 e \mathrm{e} e或数字。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char number[50];
scanf("%s", number);
int i = 0, len = strlen(number), errorFlag = 0, floatFlag = 0;
while (i < len)
{
while (i < len && isdigit(number[i]))
{
i++;
}
if (i >= len)
{
break;
}
if (number[i] == '.')
{
if (floatFlag)
{
errorFlag = 1;
break;
}
i += 1;
floatFlag = 1;
if (i < len && !(isdigit(number[i]) || number[i] == 'e'))
{
errorFlag = 1;
break;
}
}
else if (number[i] == 'e')
{
if (i == 0 || i >= len - 1)
{
errorFlag = 1;
break;
}
i += 1;
if (number[i] == '+' || number[i] == '-')
{
i += 1;
}
while (i < len && isdigit(number[i]))
{
i++;
}
if (i < len)
{
errorFlag = 1;
}
break;
}
else
{
errorFlag = 1;
break;
}
}
errorFlag ? printf("error\n") : printf("correct\n");
return 0;
}