0

チャプター 2 の最後にあった 1 つの演習で行き詰まっています。この演習での問題は、論理的にループして入力を数回尋ねる方法がわからないことです。入力を 2 回要求するコードを書きました。以前は、本が提供するヘッダーを使用してそのタスクを簡単に実行していましたが、その方法はもう機能しませんでした。演習とコードを提供しますので、お役に立てれば幸いです。そして私の英語でごめんなさい。

あなた
が働いているのと同じ場所にクラスを持つプログラムを書いてくださいmain
同じ書籍番号を持つ複数のトランザクションを読み取り、その書籍番号を持つ各トランザクションをカウントするコードを記述します。

マイコード

#include <iostream>
#include <string>
using namespace std;

//Data structure Code 
struct Sales_Data
{
std::string bookNo;
unsigned unit_sold;
double revenue;
};
int main()
{

Sales_Data data1,data2; //Data wich will hold input 
double price;           //Price per book used to calculate total revenue

// Checking if there was data input of book number units sold and price
if (std::cin>>data1.bookNo>>data1.unit_sold>>price)
{
    int cnt=1;  //Start Counter 
    data1.revenue=data1.unit_sold*price;// data1 calculating total revenue from price and unit_sold 

    while (std::cin>>data2.bookNo>>data2.unit_sold>>price)
    {
        data2.revenue=data2.revenue*price;

              //checking if book name is same
        if (data1.bookNo == data2.bookNo)
        {
            ++cnt; //Incrementing counter if they same
            unsigned totalCnt=data1.unit_sold+data2.unit_sold;
            double totalRevenue=data1.revenue+data2.revenue;
            //Print out result
            std::cout<<cnt<<data1.bookNo<<" "<<totalCnt<<" "<<totalRevenue<<" ";
            getchar();
            getchar();
            getchar();
            if (totalCnt != 0)

                std::cout<<totalCnt/totalRevenue;
            else 
                std::cout<<"(No Sales)"<<std::endl;
                return 0;
        }else{
            std::cerr<<"Book numbers isn't same"<<std::endl;
            return -1;
        }           
    }
}
return 0;          
}   

また、理由は確かですが、収益は私にゴミ番号を与えます。お時間をいただきありがとうございます。

4

1 に答える 1

0

使う前に初期化しましdata2.revenueたか?

data2.revenue=data2.revenue*price;

を初期data2化するには、次のことができます。

struct Sales_Data
{
    std::string bookNo;
    unsigned unit_sold;
    double revenue;

    Sales_Data(std::string s = "", unsigned u = 0, double r = 0)
        : bookNo(s), unit_sold(u), revenue(r) {}
};

また

Sales_Data data2 = { "a", 0, 0 };

また

Sales_Data data2;
data2.bookNo = "";
data2.unit_sold = 0;
data2.revenue = 0;

複数の入力の場合:

#include <map>
#include <string>
#include <iostream>
using namespace std

int main()
{
    map<string, Sales_Data> count;
    Sales_Data data;

    while (cin >> data.bookNo >> data.unit_sold) { // <- this will allow you read multiple transactions

        if (map.find(data.bookNo) != count.end()) {
            count[data.bookNo].unit_sold += data.unit_sold;
            // and do some other thing.
        } else {
            count[data.bookNo] = data.
        }
    }
    return 0;
}
于 2013-04-24T02:13:00.350 に答える