如何区分带前导零的整数与普通整数(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
相关产品推荐
相关产品推荐

