C语言中对float变量的字符过滤

来源:百度知道 编辑:UC知道 时间:2024/09/20 06:50:11
今天写了个C的程序,如下:
#include <stdio.h>
#include <string.h>
#include <math.h>

int dec(char *str)
{
int i;
int len=strlen(str);

for(i=0;i<sen;i++,str++)
{
if(*str<'0' || *str>'9')
return -1;
}

return 1;
}

void main()
{
int i;
float k;
char j[10];

printf("请输入数值:");
gets(j);
while(-1==dec(j))
{
printf("error:");
fflush(stdin);
gets(j);
}

k=(float)(atof(j));
printf("%.2f",j);

}

现在有问题如下:
1.这样过滤,可以把字母、特殊符号等非数字类型的值过滤掉,但是由于程序设计的问题,k是浮点型,是支持小数点的,这样过滤也同样把小数点过滤掉了,因此在输入的时候一旦输入带有小数点的数字也会打印error,请问该如何过滤非数值类型的值并且省略掉小数点,即可以输入小数点或小数点不在过滤的范畴中!
2.能否按1的要求给出个示例程序!
3.谢谢!

楼主,只需要把判断非法字符那个if语句改动一下就可以了
程序如下:
#include <stdio.h>
#include <string.h>
#include <math.h>

int dec(char *str)
{
int i;
int len=strlen(str);

for(i=0;i<len;i++,str++)
{
if((*str<'0' || *str>'9')&&*str!='.')
return -1;
}

return 1;
}

void main()
{
int i;
float k;
char j[10];

printf("请输入数值:");
gets(j);
while(-1==dec(j))
{
printf("error:");
fflush(stdin);
gets(j);
}

k=(float)(atof(j));
printf("%.2f",k);

}