C++:动态数组异常可用及变量作用域相关疑问
C++:动态数组异常可用及变量作用域相关疑问
嘿,作为刚接触C++的新手,能写出动态数组的雏形已经超棒啦!不过你的代码目前还有几个需要补全和注意的细节,我给你慢慢捋:
先把你写的代码片段放出来,方便咱们对着说:
#include <iostream> using namespace std; int main() { int capacity = 5; int* numbers = new int[capacity]; int index=0; while (true) { cout << "Please enter a whole number. "; cin >> numbers[index]; // 这里还没写完后续逻辑哦 } }
数组越界的坑得避开:你设置了数组容量是5,下标只能从0到4,可现在是无限循环,当index涨到5的时候再往数组里写,就属于越界访问了,这是C++里的未定义行为——程序可能直接崩,也可能输出一堆乱码,完全没谱。所以每次输入前或者输入后,一定要检查index有没有超过容量上限:
// 输入前先检查容量 if (index >= capacity) { cout << "数组已经满啦,不能再输入咯!" << endl; break; }要是想搞真正的“动态数组”(满了自动扩容),新手阶段可以先放一放,先把边界处理稳了再说。
得给用户留个退出的路子:你用了
while(true)无限循环,用户输入到什么时候是个头呀?可以加个退出提示,比如告诉用户输入-1就结束,或者输入非整数的时候自动退出。比如改成这样:cout << "请输入整数,输入-1可退出:"; while (cin >> numbers[index]) { if (numbers[index] == -1) { break; } index++; if (index >= capacity) { cout << "数组满啦,自动退出~" << endl; break; } cout << "请继续输入,输入-1退出:"; }动态内存别忘了释放:你用
new在堆上申请了内存,可程序结束前没释放,虽然程序关了操作系统会回收,但养成好习惯很重要!在main函数结束前一定要加delete[] numbers;,不然要是写长期运行的程序,内存会被一点点耗光哦。输入失败的情况也得处理:要是用户手滑输入了字母或者符号,cin会直接进入错误状态,之后的输入操作全废了。这时候得重置cin的状态,还要把输入缓冲区里的垃圾内容清掉,不过这个需要包含
<limits>头文件,新手阶段可以先了解,不用急着实现,先把核心逻辑跑通。
刚学C++踩这些坑太正常啦,慢慢来,把每一个小细节搞明白,很快就能上手啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

