Упражнение для праймера С++ 2.41

76
5

Я застрял в 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;
}

И также было понятно, почему, но выручка дает мне количество мусора. Спасибо за ваше время.

спросил(а) 2013-04-24T05:10:00+04:00 7 лет, 2 месяца назад
1
Решение
110

Вы data2.revenue с 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-24T05:13:00+04:00 7 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема