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

如何在C语言中限制输入字符串长度,超限时重新提示用户输入

C语言限制字符串输入长度并处理超长输入的解决方案

你的问题核心是两个:一是fgets不会主动拦截超长输入,超长部分会留在缓冲区干扰下一次读取;二是没有校验输入长度并提示重输。下面是修正后的完整代码,附详细说明:

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

int main() {
    char arr[10][25]; // 存储最多10个字符串,每个最多24个有效字符+1个终止符
    int i;

    for (i = 0; i < 10; i++) {
        while (1) {
            printf("Enter string %d: ", i + 1);
            fgets(arr[i], 25, stdin);

            // 检查输入是否超长:如果字符串长度是24,且最后一个字符不是换行符,说明输入超出限制
            if (strlen(arr[i]) == 24 && arr[i][23] != '\n') {
                printf("Error: String exceeds maximum length of 24 characters. Please re-enter.\n");
                // 清空输入缓冲区的剩余字符,避免干扰下一次输入
                int c;
                while ((c = getchar()) != '\n' && c != EOF);
            } else {
                // 把fgets读取到的换行符替换成字符串终止符
                size_t len = strlen(arr[i]);
                if (len > 0 && arr[i][len - 1] == '\n') {
                    arr[i][len - 1] = '\0';
                }
                break; // 输入符合要求,跳出循环,处理下一个字符串
            }
        }
    }

    // 可选:打印输入的所有字符串,验证结果
    printf("\nYou entered the following strings:\n");
    for (i = 0; i < 10; i++) {
        printf("String %d: %s\n", i + 1, arr[i]);
    }

    return 0;
}

关键逻辑说明

  • 输入校验:当fgets读取到的字符串长度等于24时,说明已经占满了缓冲区(因为数组是25字节,最后一位要存'\0'),此时如果最后一个字符不是换行符,就代表用户输入的内容超过了24个有效字符,触发错误提示。
  • 清空缓冲区:超长输入后,剩余的字符会留在标准输入缓冲区里,必须用getchar()循环读取直到遇到换行符或EOF,否则下一次fgets会直接读取这些残留字符,跳过用户的手动输入。
  • 处理换行符:fgets会将用户按下的回车('\n')也读入字符串,替换成'\0'可以让字符串更整洁,避免后续打印或处理时出现多余的空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:51:02