C语言如何限制用户仅输入指定数量的元素?
现有代码的问题
你写的代码存在几个核心错误,导致无法达到预期效果:
- 逻辑判断
*numbers != 11完全错误:*numbers等价于numbers[0],取的是输入字符串第一个字符的ASCII值,和输入的长度没有任何关联 - 没有给
scanf加输入长度限制,用户如果输入超过10个字符会直接溢出numbers数组,触发内存越界错误 - 没有校验输入的内容是否都是数字,即使用户输入字母、符号也会被当成有效内容接收
可行实现方案
实现逻辑如下:
- 限制输入长度为10,避免数组溢出
- 校验输入的字符串长度是否刚好为10
- 遍历字符串每一位,确认所有字符都是0-9的数字
- 全部符合条件判定输入有效,否则提示输入无效
完整实现代码:
#include <stdio.h> #include <string.h> #include <ctype.h> int main() { char numbers[11]; printf("Enter your 10 numbers: "); // 限制最多输入10个字符,避免溢出 scanf("%10s", numbers); // 先校验长度是否为10 if (strlen(numbers) != 10) { printf("Enter a valid number.\n"); return 0; } // 遍历校验每一位都是数字 for (int i = 0; i < 10; i++) { if (!isdigit(numbers[i])) { printf("Enter a valid number.\n"); return 0; } } // 所有校验通过 printf("Your number is %s:\n", numbers); return 0; }
内容的提问来源于stack exchange,提问作者Silverlik
相关产品推荐
相关产品推荐

