C++借助指针校验分数是否在0-100区间 解决无效输入仍被录入问题
问题原因
你原有代码仅做了无效值提示,没有配置输入重试逻辑:即使输入数值超出0-100的合法区间,循环计数i仍然会正常自增,非法值会直接存入数组,程序直接进入下一个分数的输入流程,导致错误数据被录入。
修复方案
在分数输入环节增加循环重试逻辑,只有输入值落在0-100区间时,才进入下一个分数的输入步骤,修改后的完整代码如下:
#include <iostream> using namespace std; void sort(int*, int); void displaySort(int*, int); int main() { int lInput; cout << "请输入列表长度:"; cin >> lInput; int* lPtr = new int[lInput]; for (int i = 0; i < lInput; i++) { cout << "请输入分数:"; cin >> *(lPtr + i); // 新增输入校验循环,输入非法时重复请求输入 while (*(lPtr + i) < 0 || *(lPtr + i) > 100) { cout << "输入无效,请重新输入:"; cin >> *(lPtr + i); } } cout << endl; sort(lPtr, lInput); displaySort(lPtr, lInput); cout << endl; delete[] lPtr; system("PAUSE"); return 0; } void sort(int* array, int size) { int scan, minIndex, minValue; for (int scan = 0; scan < (size - 1); scan++) { minIndex = scan; minValue = *(array + scan); for (int i = scan + 1; i < size; i++) { if (*(array + i) < minValue) { minValue = *(array + i); minIndex = i; } } *(array + minIndex) = *(array + scan); *(array + scan) = minValue; } } void displaySort(int* array, int size) { cout << "升序排列后的分数列表:" << endl; for (int i = 0; i < size; i++) { cout << *(array + i) << " "; } }
逻辑说明
- 原代码仅用
if做单次校验,没有重试逻辑,非法值会被直接存入数组 - 替换为
while循环后,只要当前输入的分数不符合0-100的区间要求,就会停在当前输入位置反复请求用户输入,直到拿到合法值后才会进入下一个分数的录入流程
内容的提问来源于stack exchange,提问作者ATSpiro
相关产品推荐
相关产品推荐

