You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:39:04