簡體   English   中英

輸入要在陣列中顯示的數量

[英]Inputting the amount you want displayed in the array

我正在編寫一個顯示整數數組的程序。 我設置了數組的大小,但我想知道如何向用戶詢問他們想要列出的數組的索引。 假設const SIZE = 10 ,並且用戶想要查看數組中的前三個。 我還想寫一個異常 ,如果用戶輸入超過了數組的大小,就會捕獲錯誤。 如果您需要查看一些代碼,請告訴我們。 任何幫助表示贊賞!

intergerarray.h

class IntArray
{
private:
    int *aptr;                     // Pointer to the array
    int arraySize;                 // Holds the array size
    void subscriptError();         // Handles invalid subscripts
public:
    class OutOfBoundException
    {
    public:
        int index;
        OutOfBoundException(){};
        int getInde() { return index; }

    };
    IntArray(int);                 // Constructor
    IntArray(const IntArray &);    // Copy constructor
    ~IntArray();                   // Destructor

    int size() const               // Returns the array size
    {
        return arraySize;
    }

    int &operator[](const int &);  // Overloaded [] operator
};

IntergerArray.cpp

IntArray::IntArray(int s)
{
    arraySize = s;
    aptr = new int[s];
    for (int count = 0; count < arraySize; count++)
        *(aptr + count) = 0;
}


IntArray::IntArray(const IntArray &obj)
{
    arraySize = obj.arraySize;
    aptr = new int[arraySize];
    for (int count = 0; count < arraySize; count++)
        *(aptr + count) = *(obj.aptr + count);
}


IntArray::~IntArray()
{
    if (arraySize > 0)
        delete[] aptr;
}


void IntArray::subscriptError()
{
    cout << "ERROR: Subscript out of range.\n";
    exit(0);
}


int &IntArray::operator[](const int &sub)
{
    if (sub < 0 || sub >= arraySize)
        subscriptError();
    return aptr[sub];
}

驅動程序file.cpp

    int main()
{
    int SIZE = 10;
    //int index;
    //cout << "enter an index";
    //cin >> index;
    IntArray table(SIZE);

    for (int x = 0; x < SIZE; x++)
        table[x] = x;

    for (int x = 0; x < SIZE; x++)
        cout << table[x] << " ";
    cout << endl;

    //table[SIZE + 1] = 0;

    return 0;
}

我想你想要顯示低於用戶輸入的索引值的所有元素:

讓array []為size = 10的數組名,你可以從用戶那里獲得一個索引值(比如l ),並在for loop使用該值來打印索引中低於l所有元素

 int array[size] 
void disp_in(int l)
  {
   if(l>=size) // if l greater than or equal to size (as index start at 0)
      throw l;
   else
       {

        cout<<"Elements : ";
        for(int i=0;i<=l;i++) //if we have say l=2 ,array values in indexes 0,1and 2 will be displayed
            cout<<array[i];

         }
    }
int main ()
      {
       int l;
       cout<<"Enter index : "; 
       cin>>l;  //till this index value, the array value will be displayed
       try
          {
           disp_in(l);
            }
       catch(int e)
          {
          cout<<"Index value greater than max index"; 
            }
         return 0;
         }

這不是你想要做的嗎? 為什么這么簡單的問題代碼呢?

    const int arraySize = 10;
    int array[arraySize];

    int elementToDis;
    do
    {
        std::cout << "Number of array elements to display: ";
        std::cin >> elementToDis;
    } while (elementToDis > arraySize || elementToDis < 0); // this is your exeption

    for (int ccc(0); ccc < elementToDis; ++ccc)
        std::cout << "Index " << ccc << ": " << array[ccc] << '\n';

你可以嘗試這樣的事情:

#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>

void print_numbers( const std::vector<int>& array, int nNumbers, const char* pszSeparator )
{
    if ( nNumbers > static_cast<int>(array.size()) )
    {
        throw std::exception();
    }

    std::copy( array.begin(), array.begin() + nNumbers, std::ostream_iterator<int>( std::cout, pszSeparator ) );

}

int main()
{
    std::vector<int> array( 10 );

    //Just for testing
    {
        int n = 0;
        auto generator = [n]() mutable
        {
            return n++;
        };
        std::generate_n( array.begin(), array.size(), generator );
    }

    try
    {
        print_numbers(array, 11, "\n");
    }
    catch ( std::exception e )
    {
        std::cout << "Error message..." << std::endl;
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM