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

