C语言如何判断输入的是否为数字?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 C语言 正文

方法1:使用 scanf 的返回值

scanf 函数会返回成功匹配和赋值的项数,如果输入的是数字,scanf 会返回 1(因为 %d%lf 匹配了一个数字)。

c语言判断输入的是否为数字
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    int num;
    printf("请输入一个整数: ");
    if (scanf("%d", &num) == 1) {
        printf("输入的是数字: %d\n", num);
    } else {
        printf("输入的不是数字!\n");
    }
    return 0;
}

缺点

  • 如果输入的是 123abcscanf 会读取 123 并返回 1,但剩余的 abc 会留在输入缓冲区,可能影响后续输入。
  • 如果输入的是 abc123scanf 会直接返回 0,不会读取任何数据。

方法2:使用 fgets + strtolstrtod

更健壮的方法是先读取整行输入,再用 strtol(整数)或 strtod(浮点数)解析字符串。

示例1:判断整数

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int isInteger(const char *str) {
    char *endptr;
    strtol(str, &endptr, 10);
    // 如果整个字符串都被转换(endptr指向字符串末尾),则返回1
    return (*endptr == '\0');
}
int main() {
    char input[100];
    printf("请输入一个整数: ");
    fgets(input, sizeof(input), stdin);
    // 去掉末尾的换行符
    input[strcspn(input, "\n")] = '\0';
    if (isInteger(input)) {
        printf("输入的是整数: %s\n", input);
    } else {
        printf("输入的不是整数!\n");
    }
    return 0;
}

示例2:判断浮点数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isDouble(const char *str) {
    char *endptr;
    strtod(str, &endptr);
    return (*endptr == '\0');
}
int main() {
    char input[100];
    printf("请输入一个浮点数: ");
    fgets(input, sizeof(input), stdin);
    input[strcspn(input, "\n")] = '\0';
    if (isDouble(input)) {
        printf("输入的是浮点数: %s\n", input);
    } else {
        printf("输入的不是浮点数!\n");
    }
    return 0;
}

优点

  • 可以正确处理 123-45614-2.5e3 等格式。
  • 不会留下未处理的输入在缓冲区。

方法3:逐个字符检查

如果不想用 strtolstrtod,可以手动检查每个字符是否是数字(或允许 、、、e/E)。

c语言判断输入的是否为数字
(图片来源网络,侵删)

示例:判断整数

#include <stdio.h>
#include <ctype.h>
#include <string.h>
int isInteger(const char *str) {
    if (str == NULL || *str == '\0') {
        return 0; // 空字符串不是数字
    }
    // 允许开头有 '+' 或 '-'
    if (*str == '+' || *str == '-') {
        str++;
    }
    // 检查剩余字符是否都是数字
    while (*str != '\0') {
        if (!isdigit(*str)) {
            return 0;
        }
        str++;
    }
    return 1;
}
int main() {
    char input[100];
    printf("请输入一个整数: ");
    fgets(input, sizeof(input), stdin);
    input[strcspn(input, "\n")] = '\0';
    if (isInteger(input)) {
        printf("输入的是整数: %s\n", input);
    } else {
        printf("输入的不是整数!\n");
    }
    return 0;
}

缺点

  • 需要手动处理 、、、e/E 等情况,代码较复杂。
  • 对于浮点数,需要额外检查小数点和指数部分。

方法 适用场景 优点 缺点
scanf 简单输入 代码简单 可能残留输入缓冲区
fgets + strtol/strtod 健壮的数字判断 正确处理各种格式 需要额外函数
逐个字符检查 自定义格式 完全可控 代码复杂

推荐方法

  • 如果只是简单判断,用 scanf
  • 如果需要健壮性,用 fgets + strtol/strtod
  • 如果需要完全自定义格式(如只允许特定字符),用逐个字符检查。

希望这些方法能帮到你!如果有更具体的需求,可以进一步优化代码。

c语言判断输入的是否为数字
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede主页更新后空白,怎么办?
« 上一篇 今天
dede子栏目列表分页如何实现?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]