I've got a program that's supposed to take a description, serial number and price for an item. Then sort by highest price, and display the new order.

Everything works(thanks to several dozen searches through the board/source codes here) except for displaying the description string at the end. I'm thinking(and I may be totally off base here) that it's something to do with buffers, but I just can't figure it out.

Any help would be greatly appreciated. THANKS!

Code:
#include <iostream>
#include <string>
#include <iomanip>

#define SWAP(a,b)   { double t; t=a; a=b; b=t; }  // Macros for Bubble Sort swapping
#define STRINGSWAP(c,d)   {string t; t=c; c=d; d=t;} 
#define INDEX 8

using namespace std;

const int MAX_NUM_PURCHASES = 50;
void get_all_purchases(double price[], double serialNum[], string descript[], int numPurchases);
void bubble_srt(double price[], double serialNum[], string descript[], int numPurchases);
void print_top_purchases(double price[], double serialNum[], string descript[], int numPurchases);


int main()
{

    double price[MAX_NUM_PURCHASES];
    double serialNum[MAX_NUM_PURCHASES];  
    string descript[MAX_NUM_PURCHASES];
    int numPurchases;
    
    do
    {
       cout << "How many purchases do you have? ";
       cin >> numPurchases;
       
       if (numPurchases <= 0 || numPurchases > MAX_NUM_PURCHASES)
            cout << "Must be between 1 and "<< MAX_NUM_PURCHASES << "\n";
    }while (numPurchases > MAX_NUM_PURCHASES || numPurchases <= 0);
    
    get_all_purchases(price, serialNum, descript, numPurchases);
    
    
    

    system("pause");
    return (0);
}


void get_all_purchases(double price[], double serialNum[], string descript[], int numPurchases)
{
    for (int i=0; i < numPurchases; i++)
    {
        cout << "\n\nInput the description: ";
        getline(cin, descript[i]);
        std::cin.clear();       
        std::cin.sync();      
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        cout << "Input the serial number: ";
        cin >> serialNum[i];
        do
        {
            cout << "Input the price: ";
            cin >> price[i];
            if(price <= 0)
                     cout << "Must be greater than zero\n";
        }while(price[i] <=0);
    }//! End of for loop over items-purchased input.
    bubble_srt(price, serialNum, descript, numPurchases);
    return; 
} 


/*
Bubble Sort source code found at cprogramming.com
http://www.cprogramming.com/source/bubblesort.c
*/
void bubble_srt( double price[], double serialNum[], string descript[], int numPurchases )  
{   
    int i, j;
       
    for(i = 0; i < numPurchases; i++)         // Make a pass through the array for each element
    {              
        for(j = 1; j < (numPurchases-i); j++) // Go through the array beginning to end
        {              
           if(price[j-1] < price[j])          // If the the first number is greater, swap it 
           {       
              SWAP(price[j-1],price[j]);
              SWAP(serialNum[j-1],serialNum[j]);
              STRINGSWAP(descript[j-1],descript[j]);
           }   
        }
    }//! End of for loop passing through each element
    print_top_purchases(price, serialNum, descript, numPurchases);
}

void print_top_purchases(double price[], double serialNum[], string descript[], int numPurchases)
{
     int numPrint;
     
     if(numPurchases < 5)
          numPrint = numPurchases;
     else
          numPrint = 5;
          
     for(int i = 0; i < numPrint; i++)
     {
             cout << (i+1) << ". " << setw(6) << price[i] << "   " << setw(6) 
             << serialNum[i] << "   " << setw(15) << descript[i] << endl;  /*this is where it    doesn't work, searched for hours, can't figure it out.*/
     }
}