0

我的程序有问题。当我运行它时,它会询问用户专辑和标题,但随后它只是退出循环而不询问价格和销售税。有什么想法吗?

这是一个示例运行

折扣于 2010 年 9 月 15 日生效
古典 8%
国家 4%
国际 17%
爵士乐 0%
摇滚 16%
显示 12%
有没有更多的交易?是/否
是的
输入 CD 艺术家:
七尘
输入 CD 标题:
自称
输入 CD 类型:
岩石
输入价格
有没有更多的交易?是/否
感谢您与我们购物!

程序代码:

#include <iostream>

#include <string>



using namespace std;



int counter = 0;

string discount_tiles[] = {"Classical", "Country", "International", "Jazz", "Rock", "Show"};

int discount_amounts[] = {8, 4, 17, 0, 16, 12, 14};

string date = "September 15, 2010";



// Array Declerations

    //Artist array

    char** artist = new char *[100];        

    //Title array

    char** title = new char *[100]; 

    //Genres array

    char** genres = new char *[100];

    //Price array

    double* price[100]; 

    //Discount array

    double* tax[100];

    // sale price array

    double* sale_price[100];    

    //sale tax array

    double* sale_tax[100];  

    //cash price array

    double* cash_price[100];    



//Begin Prototypes

char* getArtist();

char* getTitle();

char* getGenre();

double* getPrice();

double* getTax();

unsigned int* AssignDiscounts();

void ReadTransaction (char ** artist, char ** title, char ** genre, float ** cash, float & taxrate, int albumcount);

void computesaleprice();





bool AreThereMore ();



//End Prototypes



bool areThereMore ()

{   

    char answer;

    cout << "Are there more transactions? Y/N" << endl;

    cin >> answer;

    if (answer =='y' || answer =='Y')

        return true;

    else 

        return false;

}



char* getArtist()

{

    char * artist= new char [100];

    cout << "Enter Artist of CD: " << endl;

    cin.getline(artist,100);

    cin.ignore();

    return artist;

}



char* getTitle()

{

    char * title= new char [100];

    cout << "Enter Title of CD: " << endl;

    cin.getline(title,100);

    cin.ignore();

    return title;

}



char* getGenre()

{

    char * genre= new char [100];

    cout << "Enter Genre of CD: " << endl;

    cin.getline(genre,100);

    cin.ignore();

    return genre;

}



double* getPrice()

{   

    //double* price = new double();

    //cout << "Enter Price of CD: " << endl;

    //cin >> *price;



    //return price;



    double p = 0.0;

    cout<< "enter price" << endl;

    cin >> p;

    cin.ignore();

    double* pp = &p;

    return pp;

}



double* getTax()

{

    double* tax= new double();

    cout << "Enter local sales tax: " << endl;

    cin >> *tax;



    return tax;

}



int findDiscount(string str){



    if(str.compare(discount_tiles[0]) == 0)

        return discount_amounts[0];

    else if(str.compare(discount_tiles[0]) == 0)

        return discount_amounts[1];

    else if(str.compare(discount_tiles[0]) == 0)

        return discount_amounts[2];

    else if(str.compare(discount_tiles[0]) == 0)

        return discount_amounts[3];

    else if(str.compare(discount_tiles[0]) == 0)

        return discount_amounts[4];

    else if(str.compare(discount_tiles[0]) == 0)

        return discount_amounts[5];

    else{

        cout << "Error in findDiscount function" << endl;

        return 0;

    }

}



void computesaleprice()

{

    /** fill in array for all purchases **/

    for( int i=0; i<=counter; i++){

        double temp = *price[i];

        temp -= findDiscount(genres[i]);

        double* tmpPntr = new double();

        tmpPntr = &temp;

        sale_price[i] = tmpPntr;

        delete(&temp);

        delete(tmpPntr);

    }

}











void printDailyDiscounts(){

    cout << "Discounts effective for " << date << endl;

    for(int i=0; i < 6; i++){

        cout << discount_tiles[i] << "\t" << discount_amounts[i] << "%" << endl;

    }

}



//Begin Main

int main ()

{







    for( int i=0; i<100; i++){

        artist[i]=new char [100];

        title[i]=new char [100];

        genres[i]=new char [100];       

        price[i] = new double(0.0);

        tax[i] = new double(0.0);

    }



    // End Array Decleration



    printDailyDiscounts();



    bool flag = true;   

    while(flag == true){

        if(areThereMore() == true){

            artist[counter] = getArtist();

            title[counter] = getTitle();

            genres[counter] = getGenre();

            price[counter] = getPrice();

            //tax[counter] = getTax();          

            //counter++;

            flag = true;

        }

        else {

            flag = false;

        }

    }





    //compute sale prices

    //computesaleprice();













    cout << "Thank you for shopping with us!" << endl;



    return 0;

}

//End Main













/**

void ReadTransaction (char ** artist, char ** title, char ** genre, float ** cash, float & taxrate, int albumcount)

{

    strcpy(artist[albumcount],getArtist());

    strcpy(title[albumcount],getTitle());

    strcpy(genre[albumcount],getGenre());

    //cash[albumcount][0]=computesaleprice();???????

    //taxrate=getTax;??????????????





}

* 

* */







unsigned int * AssignDiscounts()

{

    unsigned int * discount = new unsigned int [7];

    cout << "Enter Classical Discount: " << endl;

    cin >> discount[0];

    cout << "Enter Country Discount: " << endl;

    cin >> discount[1];

    cout << "Enter International Discount: " << endl;

    cin >> discount[2];

    cout << "Enter Jazz Discount: " << endl;

    cin >> discount[3];

    cout << "Enter Pop Discount: " << endl;

    cin >> discount[4];

    cout << "Enter Rock Discount: " << endl;

    cin >> discount[5];

    cout << "Enter Show Discount: " << endl;

    cin >> discount[6];

    return discount;

}



/**

char ** AssignGenres ()

{

    char ** genres = new char * [7];

    for (int x=0;x<7;x++)

        genres[x] = new char [20];

    strcpy(genres [0], "Classical");

    strcpy(genres [1], "Country");

    strcpy(genres [2], "International");

    strcpy(genres [3], "Jazz");

    strcpy(genres [4], "Pop");

    strcpy(genres [5], "Rock");

    strcpy(genres [6], "Show");

    return genres;

}

**/







float getTax(float taxrate)

{

    cout << "Please enter store tax rate: " << endl;

    cin >> taxrate;

    return taxrate;

}
4

1 回答 1

1

您正在从以下位置返回指向局部变量的指针getPrice

double* getPrice()
{   
    double p = 0.0;
    cout<< "enter price" << endl;
    cin >> p;
    cin.ignore();
    double* pp = &p;
    return pp;
}

由于p当您从函数返回时超出范围(即被销毁),您会得到一个悬空指针,这会导致未定义的行为。

不要求征收销售税,因为调用已getTax()被注释掉。

于 2010-03-20T21:59:23.197 回答