You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何区分带前导零的整数与普通整数(C语言)

可行,实现方法如下

原代码用%d读取整数时会自动忽略前导零,导致001和1被解析为同一个整数值,无法区分输入的格式差异。要实现带前导零和无前置零的整数判定为不相等,需要保留输入的原始字符串形式,通过字符串比较来实现,具体步骤和代码如下:

核心思路

整数类型会丢失前导零的格式信息,所以改用字符串存储输入内容,直接比较两个字符串是否完全一致:

  • 若字符串完全相同(包括前导零数量、数字顺序),则判定相等;
  • 若字符串不同(比如001和1),则判定不相等。

同时需要验证输入是否为合法的十进制整数(仅包含数字字符),避免非数字输入干扰结果。

实现代码

#include <stdio.h>
#include <string.h>
#include <ctype.h>

// 验证字符串是否为合法的十进制整数(仅含数字字符)
int is_valid_integer(const char *s) {
    if (*s == '\0') return 0;
    while (*s != '\0') {
        if (!isdigit((unsigned char)*s)) {
            return 0;
        }
        s++;
    }
    return 1;
}

int main() {
    char num1[100], num2[100];
    // 读取两个输入字符串,限制长度避免缓冲区溢出
    if (scanf("%99s %99s", num1, num2) != 2) {
        printf("输入格式错误\n");
        return 1;
    }

    // 验证输入合法性
    if (!is_valid_integer(num1) || !is_valid_integer(num2)) {
        printf("输入不是合法整数\n");
        return 1;
    }

    // 比较字符串是否完全一致
    if (strcmp(num1, num2) == 0) {
        printf("equal\n");
    } else {
        printf("not equal\n");
    }

    return 0;
}

效果说明

  • 输入1 1:输出equal
  • 输入001 1:输出not equal
  • 输入000 0:输出not equal
  • 输入123 0123:输出not equal

内容的提问来源于stack exchange,提问作者Fernando Gunawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:16:16