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

C语言中如何检查输入字符串长度?现有函数如何新增短字符串校验

修改C语言输入字符串函数,同时校验过长和过短情况

嘿,我来帮你完善这个get_string函数!目前你的代码已经能处理输入超出指定长度的问题,要加上输入过短的校验其实很直观,咱们来一步步调整:

核心思路

我们需要给函数增加一个最小长度参数,这样可以灵活控制允许的最短输入长度;在处理完输入的换行符后,检查处理后的字符串长度是否达标,不达标就提示错误并重新请求输入。

修改后的完整代码

#include <stdio.h>
#include <string.h>

void get_string(char *prompt, char *input, int max_length, int min_length) {
    printf("%s", prompt);
    fgets(input, max_length, stdin);

    // 处理输入过长的情况(原逻辑保留)
    if (input[strlen(input) - 1] != '\n') {
        int dropped = 0;
        while (fgetc(stdin) != '\n') {
            dropped++;
        }
        if (dropped > 0) {
            printf("Errore: La stringa è troppo lunga, inseriscine una più corta.\n");
            get_string(prompt, input, max_length, min_length);
            return;
        }
    } else {
        // 去掉换行符,换成字符串结束符
        input[strlen(input) - 1] = '\0';
    }

    // 新增:校验输入过短的情况
    size_t input_len = strlen(input);
    if (input_len < min_length) {
        printf("Errore: La stringa è troppo corta! Devi inserire almeno %d caratteri.\n", min_length);
        get_string(prompt, input, max_length, min_length);
        return;
    }

    return;
}

// 使用示例
int main() {
    char input[20];
    // 要求输入至少3个字符,最多19个(因为max_length是20,留一个给'\0')
    get_string("Inserisci una stringa (min 3 caratteri): ", input, 20, 3);
    printf("Hai inserito: %s\n", input);
    return 0;
}

关键修改点说明

  • 新增min_length参数:让函数可以适应不同场景的最小长度要求,不用硬编码在函数内部,灵活性更高。
  • 输入过短校验逻辑:在处理完换行符后,计算当前输入字符串的实际长度,如果小于min_length,就输出错误提示并递归调用函数重新获取输入。
  • 优化错误提示:把原来的通用错误提示改成更具体的提示(比如“太长”和“太短”分开),用户体验更好。
  • 边界情况处理:如果用户只按了回车键(输入空字符串),strlen(input)会返回0,这时候也会触发过短校验,符合预期。

注意事项

  • 确保max_length要比实际允许的最长输入字符多1(因为fgets会保留一个位置给字符串结束符\0)。比如你想允许最多19个字符,max_length就传20。
  • 递归调用的方式在输入错误次数不多的情况下完全没问题,如果担心极端场景下的栈溢出,也可以改成循环实现(把递归换成while(1)循环,符合条件就break)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:33:29