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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:03