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

C语言如何检查字符串仅含0和1?校验修复及32位长度限制循环输入实现

C语言二进制输入合法性校验修复方案

原有代码问题根因

校验逻辑异常原因

你注释了计算字符串长度的for循环,变量i始终保留初始值0,仅校验了字符串第一个字符是否为0/1,没有遍历所有字符,因此只要第一位是0/1,不管后面有没有非法字符都会输出CORRECT。此外原代码开头多余的fgetchar()会丢弃用户输入的第一个字符,也需要删除。

需求实现思路

要同时满足两个校验规则:

  1. 去空格后的字符串所有字符只能是'0'或'1'
  2. 去空格后的字符串长度必须等于32
  3. 用死循环包裹输入逻辑,校验不通过就重复提示输入,校验通过才跳出循环执行后续流程

修复后完整代码

#include <stdio.h>
#include <string.h>   
#define CHAR_SIZE 35

// 去除字符串中所有空格
char *remove_white_spaces(char *str)
{
    int i = 0, j = 0;
    while (str[i])
    {
        if (str[i] != ' ')
            str[j++] = str[i];
        i++;
    }
    str[j] = '\0';
    return str;
}

int main()
{
    char str[CHAR_SIZE];
    // 死循环实现重复输入
    while(1)
    {
        printf("\nKey in input: ");
        // 读取用户输入,删掉原多余的fgetchar()
        fgets(str, CHAR_SIZE, stdin);
        // 去除fgets读取的末尾换行符
        str[strcspn(str, "\n")] = '\0';
        
        // 去除空格
        remove_white_spaces(str);
        printf("去空格后内容: %s\n", str);
        
        // 第一步:校验长度是否为32
        int len = strlen(str);
        if(len != 32)
        {
            printf("Wrong Input: 去空格后长度需为32位,当前长度为%d,请重新输入\n", len);
            continue;
        }
        
        // 第二步:校验所有字符是否仅为0/1
        int is_valid = 1;
        for(int i = 0; i < len; i++)
        {
            if(str[i] != '0' && str[i] != '1')
            {
                is_valid = 0;
                break;
            }
        }
        
        if(is_valid)
        {
            printf("CORRECT\n");
            // 校验通过,跳出循环执行后续逻辑
            break;
        }
        else
        {
            printf("Wrong Input: 存在0/1以外的字符,请重新输入\n");
        }
    }

    // 此处写校验通过后的后续逻辑
    return 0;
}

代码说明

  • 新增了fgets读取后去除末尾换行符的逻辑,避免换行符被计入字符串
  • 先判断长度再判断字符合法性,减少不必要的遍历操作
  • 非法输入时会输出具体错误原因,方便用户调整输入
  • 只有同时满足长度32、仅含0/1两个条件才会跳出循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:00