如何在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
相关产品推荐
相关产品推荐

