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

C语言姓名合法性校验问题:无法识别全空格姓名

问题分析

你的代码里全空格校验逻辑存在错误:当前仅判断字符串是否为空(name[0] == '\0'),但全空格字符串(比如" ")的首字符是空格而非'\0',会进入else分支;而循环只检查数字,不会识别全空格的情况,导致多个空格被误判为合法。

修复后的代码
#include <ctype.h>
#include <string.h>

int checkName(char* name)
{
    // 校验是否为全空格字符串
    int allSpaces = 1;
    for (int i = 0; i < strlen(name); i++) {
        // 若找到非空格字符,标记为非全空格
        if (!isspace((unsigned char)name[i])) {
            allSpaces = 0;
            break;
        }
    }
    if (allSpaces) {
        return 1; // 全空格,姓名无效
    }

    // 校验是否包含数字
    for (int i = 0; i < strlen(name); i++) {
        if (isdigit((unsigned char)name[i])) {
            return 1; // 含数字,姓名无效
        }
    }

    return 0; // 姓名合法
}
关键说明
  • 使用C标准库的isspace()判断字符是否为空白(涵盖空格、制表符等,若只想限制普通空格,可直接判断name[i] == ' ')
  • 先遍历字符串,只要找到一个非空白字符,就排除全空格的可能
  • 将char转为unsigned char后传入isspace/isdigit,避免处理负数值字符时出现未定义行为
  • 你提到的empty()和blank()是C++或其他框架的函数,C语言原生库中没有这些接口,因此直接用循环+标准库函数实现即可

内容的提问来源于stack exchange,提问作者Luiz Felipe Bottura Manteiga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:02:06