C语言判断字符串是否全为数字代码运行异常问题排查
错误原因分析
- 核心逻辑错误:你混淆了数字字符和数值的判断标准
C语言中通过scanf("%s")读入的字符是以ASCII码形式存储的,数字字符'0'`'9'`对应的ASCII码值为4857,而非数值0~9。你当前的判断条件input[i]>9 || input[i]<0会把所有合法数字字符都判定为非数字,导致标记变量hello总会被置为1,永远输出No。 - 非致命优化点:循环条件中每次迭代都调用
strlen(input)会重复计算字符串长度,可提前把长度存为变量提升效率;同时原有scanf没有长度限制,存在缓冲区溢出风险。
修正方案
将判断条件改为比对数字字符的范围即可,修正后的代码如下:
#include <stdio.h> #include <string.h> int main(void) { char input[50]; int i, hello = 0; scanf("%49s", input); // 限制输入长度,避免缓冲区溢出 int len = strlen(input); for (i = 0; i < len; i++){ if (input[i] > '9' || input[i] < '0'){ hello = 1; break; // 发现非数字直接跳出循环,无需后续判断 } } hello == 0 ? printf("Yes\n") : printf("No\n"); return 0; }
内容的提问来源于stack exchange,提问作者Cyrus Gomes
相关产品推荐
相关产品推荐

