2017-03-03 57 views
0

我想创建一个程序,可以帮助用户创建一个以任意整数开始的数组索引。 它也应该在执行/访问超出边界的数组组件时通知用户。如何创建一个让用户知道他们超出界限的数组?

这是我到目前为止。

#include <iostream> 
using namespace std; 

int main(){ 
class safeArray; 
}; 

const int CAPACITY=5; 

我已经将数组的容量设置为5,所以可以有一个限制。让用户能够跳出界限。

class safeArray() { 
userArray= new int [CAPACITY]; 

用户将能够为阵列中的每个插槽创建一个新的int值。

cout <<"Enter any integers for your safe userArray:"; 

if (int=0;i<CAPACITY;i++) { 
    cout<<"You are in-bounds!"; 
} 

else (int=0;i>CAPACITY;i++){ 
    cout<<"You are OUT-OF-BOUNDS!"; 
    cout<<endl; 
    return 0; 
}; 

我用if-else语句去检查数组下标吗? 我是C++新手,所以如何澄清错误或方法以简化它将会有所帮助。 谢谢。

+9

你很幸运。 C++已经有一个带边界检查的数组对象,它被称为'std :: vector',如果索引超出范围,它的'at()'方法将抛出一个异常。将它继承是一件简单的事情,并且重载'[]'操作符来调用'at()'。到目前为止,子类化和运算符重载并不是“C++新手”可能学到的东西。所以,继续阅读你的C++书籍,最终你会到达那里。 –

+0

当你事先知道数组的大小时,最好使用'std :: array',当索引超出范围时,'std :: array :: at'方法将抛出'std :: out_of_range'。 – user2176127

+0

固定大小的std :: array 也具有与在()中使用相同的边界检查。 http://en.cppreference.com/w/cpp/container/array/at –

回答

0

你的if语句应该只是阅读:

if (i<CAPACITY && i>0) { 
    cout<<"You are in-bounds!"; 
} 

else if (i>CAPACITY){ 
    cout<<"You are OUT-OF-BOUNDS!"; 
    cout<<endl; 
    return 0; 
}; 

此外,什么在边缘的情况下,当我==容量会发生什么?你的代码根本不处理这种情况。

为了使这个更整洁,你可以只用一个格式化if/else语句

if (i<CAPACITY && i>0) { // Or should this be (i<=CAPACITY)??? depends on whether 0 is an index or not 
    cout<<"You are in-bounds!"; 
} else { 
    cout<<"You are OUT-OF-BOUNDS!"; 
    cout<<endl; 
    return 0; 
}; 
+1

负指数值呢? –

+0

好点,现在编辑 – Matt

+1

更好的解决方案是完全禁止使用'unsigned'数据类型的负数。 – user4581301

0

,而不是处理内存管理,你可以使用标准容器,比如std::vector动态“阵列”或std::array用于固定大小的数组。

std::array在所有主要编译器上都没有开销,并且或多或少是C数组的C++包装。

为了让用户知道什么时候该指数超出范围的最标准集装箱提供at(std::size_t n)方法(例如std::vector::at)使用无效的索引/位置时做所有的愤怒检查你抛出一个std::out_of_range例外。

您现在要做的就是捕捉该异常,并在需要时打印消息。 这里有一个小例子:

#include <iostream> 
#include <array> 

int main() { 
    std::array<int, 12> arr; 
    try { 
     std::cout << arr.at(15) << '\n'; 
    } catch (std::out_of_range const &) { 
     std::cout << "Sorry mate, the index you supplied is out of range!" << '\n'; 
    } 
} 

live preview - ideone.com

相关问题