【发布时间】:2021-04-02 14:52:15
【问题描述】:
我试图用 c 编写一个程序来检测一个数字是整数还是浮点数,如果是浮点数,则计算小数位数。
但是我在这里遇到了一个问题,当我插入一个浮点数时,因为“。”该程序说它是一个“单词”而不是一个数字,因为我让它只接受数字并且我陷入了 while 循环。
我的代码:
#include<stdio.h>
#include <string.h>
#define BASE 10
main()
{
int length, number;
char str[10];
char ch = '.';
char *ret;
char *endptr;
do{
printf("Enter string: ");
scanf("%s", str);
number = strtol(str, &endptr, BASE);
}while (*endptr != '\0' || endptr == str);
ret = strchr(str, ch);
if(ret > 0){
length = strlen(ret);
printf("decimal places: %d\n", length - 1);
}
else {
printf("the number is integrer\n");
}
return 0;
}
【问题讨论】:
-
你试过 strtod 吗?如果您只想测试数字和点,则应执行 strtol 一次,而不是测试字符串结尾或 '.' ,如果是“.”,则使用 strtol 测试“.”后面的字符。
-
注意:避免溢出问题
char str[10]; ... scanf("%s", str);-->char str[80]; ... scanf("%79s", str); -
seixo paulo,“如果是浮点数,则计算小数位数。”:输入如“123.456e2”,是小数点后 1 位还是 3 位?
"123.456e3"是整数吗? -
@chux-ReinstateMonica 有字母是我试图避免的,因为程序会将“123.456e2”计为小数点后 5 位,我们都知道这是错误的。
-
@PtitXav 这听起来是个好主意,但我该怎么做呢?对不起,我没有想象我怎么能做到这一点