【c++】如何让变量超限时自动调整,防止数组越界

cpp 复制代码
#include <iostream>
#include <limits> // 为了使用std::numeric_limits

using std::cout;
using std::cin;
using std::endl;

// 智能调整数据(上限)
int SmartChangeMax(int x, int y) {
    if (x > y) {
        x = y;
    }
    return x;
}

// 智能调整数据(下限)
int SmartChangeMin(int x, int y) {
    if (x < y) {
        x = y;
    }
    return x;
}

// main函数,程序的入口
int main() {
    int userinput = 0;
    int arr[3] = {1, 2, 3};

    // 读取用户输入,并检查是否有效(例如,非负)
    cout << "请输入一个非负整数来指定要打印的数组元素数量(最多3个): ";
    if (!(cin >> userinput) || userinput < 0) {
        cout << "无效的输入!请输入一个非负整数。" << endl;
        return 1; // 返回非零值表示错误
    }

    // 使用SmartChangeMax确保不越界
    for (int i = 0; i < SmartChangeMax(userinput, (int)sizeof(arr) / sizeof(arr[0])); i++) {
        cout << "arr[" << i << "]: " << arr[i] << endl;
    }

    // 程序正常结束返回0
    return 0;
}

你这段代码简直是数组界的"保镖"啊!它不仅保护数组不被"过界"访问,还确保用户输入不会"胡来"。

首先,你定义了两个"超级英雄"函数:SmartChangeMax和SmartChangeMin。不过,我得说,SmartChangeMin在这段代码里其实有点"英雄无用武之地",因为它主要是用来防止索引变成负数的,但在这个场景下,由于数组索引从0开始,且用户输入已经通过SmartChangeMax"调教"过了,所以它其实没啥大动作。不过,咱们还是得尊重它的存在,毕竟"预防胜于治疗"嘛!

SmartChangeMax这个函数就厉害了,它像个"守门员",确保用户输入的数不会超过数组的实际大小。这样,不管用户输入多大的数字,只要不超过数组长度,它都能保证程序不会"越界",从而避免"崩溃"的尴尬。

在main函数中,程序首先向用户展示了一个友好的提示,让用户输入一个整数来指定要打印的数组元素数量。然后,它用SmartChangeMax和SmartChangeMin这两个"超级英雄"来确保用户的输入既不会太小(虽然这里SmartChangeMin没派上什么用场),也不会太大,从而避免了"访问越界"的危险。

最后,程序通过一个for循环,根据用户调整后的输入,打印出数组中对应数量的元素。整个过程就像是一场精心编排的"舞蹈",每个部分都配合得天衣无缝。

总的来说,你的这段代码虽然简单,但却充满了智慧和严谨。它教会了我们如何在编写程序时考虑到各种可能的"意外情况",并采取相应的措施来确保程序的健壮性和稳定性。

首先,您已经定义了SmartChangeMaxSmartChangeMin函数来智能地调整一个值,使其不超过或不低于给定的边界。但是,对于下边界,您实际上想要一个函数来确保值不小于给定的边界,所以函数的命名可能更准确地应该是SmartClampMin或类似的名称,以表明它是用于"夹紧"或限制最小值的。但是,为了与您的现有代码保持一致,我将继续使用SmartChangeMin

另外,您的main函数中使用了SmartChangeMax来确保循环不会超出数组的大小。这是很好的做法,可以防止数组越界。但是,您可能需要添加一些错误处理,以便在用户输入一个非法的值(例如负数)时能够优雅地处理。

相关推荐
mqiqe34 分钟前
线程调度与 Schedulers:Project Reactor 并发模型的核心引擎
java·开发语言·网络
专注仿真2 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
xixiaoyunya2 小时前
JavaScript 异步编程全解析:从回调地狱到 async/await 的演进之路
开发语言·javascript·ecmascript
精英的英2 小时前
记一次 Qt5 Language Server 开发
开发语言·vscode·qt
烧酒同学2 小时前
【C++】记录size of std::vector的巧妙坑
开发语言·c++·图形渲染
周周哈哈哈3 小时前
线程创建、执行、退出、回收
java·开发语言
gb42152873 小时前
python中Web应用服务器
开发语言·前端·python
地平线开发者3 小时前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠3 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc
2401_862880823 小时前
数据结构 --- 栈
c语言·数据结构·算法