Help with arrays

Discussion in 'C++' started by squintsg, Nov 11, 2010.

  1. squintsg

    squintsg New Member

    Joined:
    Nov 11, 2010
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    I can't figure out what I am doing wrong with this program. When I print the array it outputs a bunch of random large negative numbers and then the proper numbers. Please help me!


    Code:
    #include <iostream>  //for cin, cout
    #include <conio.h>     //for _getch()
    
    using namespace std;
    
    const int MAX_SIZE = 20;          // maximum size of array
    
    
    
    void ReadList( int list[],     // array of nonnegative integers
                   int& length);   // number of nonnegative integers
                                   //  in the array
    //----------------------------------------------------------------------------
    //Purpose: To read nonnegative integers into an array
    //Precondition: None
    //Postcondition: length has been assigned the number of nonnegative integers read 
    //                 and stored in list  length >0
    //               list[0] through list[length - 1] have been filled with nonnegative
    //               integers entered from the keyboard
    //------------------------------------------------------------------------------
    
    
    void PrintList(const int list[],  // array of nonnegative integers
                   int length);       // number of nonnegative integers
                                      //    in the array
    //---------------------------------------------------------------------------
    //Purpose: To print the nonnegative integers stored in the array list
    //Precondition: length is the number of nonnegative integers in list.
    //                list[0] through list[length-1] are assigned nonnegative integers
    //Postcondition: nonnegative integers in list[0] through list[length-1] have been
    //                    printed
    //-----------------------------------------------------------------------------
    
    int main()
    {
        int list[MAX_SIZE];         // array of nonnegative integers
        int length;                 // number of nonnegative integers in array
        
        //Call the functions
        ReadList(list, length);
        PrintList(list, length);
              
           
          
       
    
    
        _getch();  
    
        return 0;
    }
    
    
    //-----------------------------------------------------------------------------
    
    void ReadList(int list[],    // array of nonnegative integers
                  int& length)  // number of nonnegative integers
                                //  in the array
    
    //Purpose: To read nonnegative integers into an array
    
    {
        int number;        
        int index = 0;
        cout << "Enter nonnegative integers each separated by a blank space,\n"
             << "and mark the end of the list with a negative number: ";
         cin >> number;    //read the first integer entered
    
           //check that the number is nonnegative and
           // the size of the array is not exceeded
        while ((number >=0) && (index < MAX_SIZE))
          {
             list[index] = number;   //store the integer in the array
             index++;                 // increment the index
             cin >> number;             // read the next integer          
        }
    
        length = index;  // length is the number of nonnegative integers
                         // in the list
    }
    
    
    //----------------------------------------------------------------------------
    
    
    void PrintList(const int list[],
                   int length)
    {
       int index;
    
        cout << "\nThe list contains " << length
             << " nonnegative integer(s) as follows: \n";
    
       for (index = MAX_SIZE; index >= 0; index--)
       {
           cout << list[index] << endl;
       }
    
           
    
    }
    
    //----------------------------------------------------------------------------
     
    Last edited by a moderator: Nov 12, 2010
  2. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    What input do you give, what output do you get, what output do you expect, and what values do you think index will take within the following loop:
    Code:
    for (index = MAX_SIZE; index >= 0; index--)
    
     
  3. squintsg

    squintsg New Member

    Joined:
    Nov 11, 2010
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    I input a string of numbers ending them with a negative number. My output gives me those numbers, (which I expected and need), but after those the remainder of the space in the array is filled up with a large negative number. I think the number is -8123460 or something like that.

    The output looks like this:
    Input: 1 2 -3

    Output:
    1
    2
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460
    -899837460

    The large negatives seem to fill in the space unused by the inputted values, because if I enter 20 values (MAX_SIZE) there are none of those negative numbers.
     
  4. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    I'm puzzled by the fact that you loop from MAX_SIZE to zero in PrintList, on two counts:
    1. why are you looping from MAX_SIZE instead of length
    2. you appear to be getting output in the correct direction, i.e. list[0] first. If you loop from the end to the beginning then you *should* get
    -899837460
    -899837460
    ...
    -899837460
    2
    1


    The reason for the junk values is that you're displaying uninitialised data. If you've entered 1,2 as input, then list[0]=1 and list[1]=2, but list[2] through list[MAX_SIZE-1] just contain whatever was on the stack. LESSON here: always initialise data!
     
  5. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    Also another problem with looping from MAX_SIZE is that list[MAX_SIZE] is actually undefined. MAX_SIZE is the number of elements in the array, and the first is at zero, so if MAX_SIZE is 5 then list[0], list[1], list[2], list[3], list[4] are defined, but list[5] isn't. So attempting to use list[MAX_SIZE] will give you undefined behaviour.
     
  6. squintsg

    squintsg New Member

    Joined:
    Nov 11, 2010
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Ok, so i changed the loop from MAX_SIZE to length and it worked. Thank you very much for the help :)
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice