C++如何实现数组仅接收奇数、拒绝偶数的输入校验功能
问题定位
你代码的核心逻辑错误出在输入循环的计数器重复自增:for循环的头部本身就会在每次循环结束后执行一次i++,当你判断输入为奇数时,又手动执行了一次i++,相当于每次输入合法奇数,下标会直接+2,最终不仅会导致数组填充不全,还可能出现下标越界问题。同时你目前没有把奇偶判断逻辑抽成独立的Function2,不符合需求。
修复后的完整实现
#include <iostream> #include <iomanip> #include <string> using namespace std; // Function2:判断数字是否为奇数 bool isOdd(int n) { return n % 2 != 0; } // Function1:接收用户输入 void getUsrInput(int num[], int size) { int n; int i = 0; while (i < size) { cout << "请输入第" << i+1 << "个奇数:"; cin >> n; if (isOdd(n)) { num[i] = n; i++; // 只有输入合法才后移下标 } else { cout << "输入无效,请只输入奇数!" << endl; } } } // Function3:展示数组内容 void displayArray(int num[], int size) { cout << "D I S P L A Y - PART C/B" << endl; cout << "========================" << endl; for (int i = 0; i < size; i++) { cout << num[i] << endl; } } int main() { const int size = 5; int num[size]; getUsrInput(num, size); displayArray(num, size); return 0; }
关键修改说明
- 抽离了独立的
isOdd函数作为要求的Function2,职责单一,专门处理奇偶判断逻辑 - 把输入逻辑从for循环换成while循环,避免计数器自动自增的冲突,只有输入合法的奇数时才移动数组下标
- 把展示逻辑抽成了独立的
displayArray函数作为Function3,符合三个独立函数的需求 - 调整了输入提示的文案,更符合实际输入场景
内容的提问来源于stack exchange,提问作者mudd
相关产品推荐
相关产品推荐

