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

C语言字符串输入循环校验失效问题求助

C语言用户输入校验代码修正

你的代码存在几个关键问题,导致无法实现预期逻辑,下面直接给你梳理问题并修正:

核心问题分析

  • 字符串比较方式错误:C语言里不能直接用!=对比字符串,你这样比较的是两个字符串的内存地址,不是实际内容。必须用标准库的strcmp函数来判断字符串是否相等。
  • 循环逻辑颠倒:你先在循环外执行了一次输入,之后进入do-while循环,哪怕第一次输入正确,也会先打印"Invalid entry"再让用户重新输入,完全违背需求。
  • 校验范围不全:需求允许输入Male/Female,但原代码只判断了Male,没覆盖Female的情况。

修正后的代码

#include <stdio.h>
#include <string.h> // 必须包含这个头文件才能使用strcmp

// 假设employee是已定义的结构体,gender为足够长度的字符数组
typedef struct {
    char gender[10];
} Employee;

int main() {
    Employee employee;

    printf("Enter Employee's Gender (Male/Female): ");
    do {
        // 清除输入缓冲区残留的换行符,避免scanf直接读取空内容
        while(getchar() != '\n');
        scanf("%s", employee.gender);
        
        // 用strcmp判断输入是否合法:返回0表示字符串相等
        if (strcmp(employee.gender, "Male") != 0 && strcmp(employee.gender, "Female") != 0) {
            printf("Invalid entry\n");
            printf("Enter Employee's Gender (Male/Female): ");
        }
    } while (strcmp(employee.gender, "Male") != 0 && strcmp(employee.gender, "Female") != 0);

    // 输入正确后执行后续流程
    printf("Valid gender input: %s\n", employee.gender);
    return 0;
}

关键说明

  • strcmp(str1, str2):返回值为0时,代表两个字符串内容完全一致;返回非0则表示内容不同。
  • 加入while(getchar() != '\n');:用来清理用户输入回车后留在缓冲区的换行符,避免后续scanf读取到无效内容。
  • 调整循环逻辑:先提示输入,读取内容后校验,不合法才提示错误并重新输入,直到输入符合要求才退出循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:39:22