用C语言判断输入的字符串是否为正确的十进制数值
时间: 2023-12-06 13:39:40 浏览: 46
可以使用C语言中的标准库函数 `strtod` 来将字符串转换为浮点数,并检查转换后的结果是否等于输入的字符串。如果相等,则说明输入的字符串是正确的十进制数值,否则不是。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main() {
char str[100];
double num;
char *endptr;
int ret;
printf("请输入一个十进制数值:");
fgets(str, 100, stdin);
str[strcspn(str, "\n")] = '\0'; // 去除输入字符串末尾的换行符
// 调用 strtod 函数将字符串转换为浮点数
errno = 0;
num = strtod(str, &endptr);
// 检查转换后的结果是否等于输入字符串,并判断转换是否成功
if (errno == ERANGE) {
printf("转换出错:超出了浮点数的范围\n");
return -1;
} else if (endptr == str) {
printf("输入的不是一个有效的十进制数值\n");
return -1;
} else if (*endptr != '\0') {
printf("输入的不是一个完整的十进制数值\n");
return -1;
} else if (num == 0 && str[0] != '0' && str[0] != '+' && str[0] != '-') {
printf("输入的不是一个有效的十进制数值\n");
return -1;
} else {
printf("输入的是一个正确的十进制数值:%.10g\n", num);
return 0;
}
}
```
在上面的示例代码中,我们首先使用 `fgets` 函数读取用户输入的字符串,并使用 `strtod` 函数将字符串转换为浮点数。然后,我们对转换后的结果进行了一系列判断,以确定输入的字符串是否为正确的十进制数值。其中,我们使用了 `errno` 变量来检查转换是否出错,使用 `endptr` 指针来检查转换是否完整,使用浮点数的零值来检查输入的字符串是否有效。