Program got error

My program got problem while calculating,
it is about ordering drink,
but each time when I want to calculate,
it will show error as follows:
C:\Users\Acer\Documents\order.cpp|46|error: invalid operands of types 'int' and 'const double [5]' to binary 'operator*'|
can anyone help me to solve the problem?

My code is as follows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <cstdlib>

using namespace std;
char name [20];
int order;
int amount;
double costorder;
int counter;
char sugar;
char milk;

int main()
{
    cout<<"Enter your name:"<<endl;
    cin>>name;
    cout<<"Hello, "<<name<<", "<<endl;
    cout<<"Welcome to drink order program"<<endl;
    cout<<"Please select a drink (enter number):"<<endl;
    cout<<"1. expresso"<<endl;
    cout<<"2. cappucino"<<endl;
    cout<<"3. latte"<<endl;
    cout<<"4. Hot chocolate"<<endl;
    cout<<"5. Plain Tea"<<endl;
    cin>>order;
    cout<<"Please enter amount:"<<endl;
    cin>>amount;
    cout<<"Do you wish to add sugar? (y/n)";
    cin>>sugar;
    cout<<"Do you wish to add milk? (y/n)";
    cin>>milk;
    std::size_t const numberOfCoffees = 5;
    double const prices[numberOfCoffees] = { 2.50, 2.50, 2.50, 2.00, 1.00 };
    double costorder = amount * prices + amount * 0.50 * (milk == 'y') + amount * 0.50 * (sugar == 'y');
    cout<<"The total price for your order: RM"<<costorder<<endl;
    cout<<"Thank you for ordering!"<<endl;
}
Last edited on
You are trying to multiply the prices array on line 34 but that will obviously not work. I guess you want to multiply one of the elements in the array.
sorry if my explanation is bad im out of my house and im using cellphone.

it is about ordering drink

i think its because you are not controlling the orders, how could a compiler know if the
expresso is 2.50 ,cappucino 2.50 etc.


C:\Users\Acer\Documents\order.cpp|46|error: invalid operands of types 'int' and 'const double [5]' to binary 'operator*'|


i think you should remove the double in line 34 becuase its like you are initializing or you are declaring a new costorder
Last edited on
justineandichoruiz, actually this is my newer code. The older one you may refer to here:

http://www.cplusplus.com/forum/general/138138/
Last edited on
And I have do some corrections about my program.
But this time the program shows the result "nan".
What's the problem?

Here is the code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;
char name [20];
int order;
int amount;
long double price;
int counter;
char sugar;
char milk;

long double ordering (long double, long double);
int main()
{
    system ("color B9");
    cout<<"**********************************************************"<<endl;
    cout<<"Welcome to Sheng Wei Cafe."<<endl;
    cout<<"**********************************************************"<<endl;
    cout<<"Enter your name:"<<endl;
    cin>>name;
    cout<<"Hello, "<<name<<"!"<<endl;
    cout<<"Please select a drink (enter number):"<<endl;
    cout<<"1. expresso -- RM2.50"<<endl;
    cout<<"2. cappucino -- RM2.50"<<endl;
    cout<<"3. latte -- RM2.50"<<endl;
    cout<<"4. Hot chocolate -- RM2.50"<<endl;
    cout<<"5. Plain Tea -- RM2.50"<<endl;
    cout<<"add sugar -- RM0.50"<<endl;
    cout<<"add milk -- RM0.50"<<endl;
    cin>>order;
    cout<<"Please enter amount:"<<endl;
    cin>>amount;
    cout<<"Do you wish to add sugar? (y/n)";
    cin>>sugar;
    cout<<"Do you wish to add milk? (y/n)";
    cin>>milk;
    price = ordering (order, price); //calling out ordering function
    cout<<"The total price for your order: RM";
    cout<<price<<endl;
    cout<<"Please pay for your order!";
    cout<<"Thank you for ordering!"<<endl;
}

long double ordering (long double price, long double order)
{
    if (order == 1)
    {
        int counter = 1;
        while (counter <= amount)
        {
            long double price = 2.50;
            if (sugar == 'y', milk =='y')
            {
                price = price + 1.00;
            }
            else if (sugar == 'y', milk == 'n')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'y')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'n')
            {
                price = price + 0;
            }
        counter = counter + 1;
        }
    return price;
    }
    else if (order == 2)
    {
        int counter = 1;
        while (counter <= amount)
        {
            long double price = 2.50;
            if (sugar == 'y', milk =='y')
            {
                price = price + 1.00;
            }
            else if (sugar == 'y', milk == 'n')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'y')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'n')
            {
                price = price + 0;
            }
        counter = counter + 1;
        }
    return price;
    }
    else if (order == 3)
    {
        int counter = 1;
        while (counter <= amount)
        {
            long double price = 2.50;
            if (sugar == 'y', milk =='y')
            {
                price = price + 1.00;
            }
            else if (sugar == 'y', milk == 'n')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'y')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'n')
            {
                price = price + 0;
            }
        counter = counter + 1;
        }
    return price;
    }
    else if (order == 4)
    {
        int counter = 1;
        while (counter <= amount)
        {
            long double price = 2.00;
            if (sugar == 'y', milk =='y')
            {
                price = price + 1.00;
            }
            else if (sugar == 'y', milk == 'n')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'y')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'n')
            {
                price = price + 0;
            }
        counter = counter + 1;
        }
    return price;
    }
    else if (order == 5)
    {
        int counter = 1;
        while (counter <= amount)
        {
            long double price = 1.50;
            if (sugar == 'y', milk =='y')
            {
                price = price + 1.00;
            }
            else if (sugar == 'y', milk == 'n')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'y')
            {
                price = price + 0.50;
            }
            else if (sugar == 'n', milk == 'n')
            {
                price = price + 0;
            }
        counter = counter + 1;
        }
    return price;
    }
}


And here is the output:
**********************************************************
Welcome to Sheng Wei Cafe.
**********************************************************
Enter your name:
1
Hello, 1!
Please select a drink (enter number):
1. expresso -- RM2.50
2. cappucino -- RM2.50
3. latte -- RM2.50
4. Hot chocolate -- RM2.50
5. Plain Tea -- RM2.50
add sugar -- RM0.50
add milk -- RM0.50
1
Please enter amount:
3
Do you wish to add sugar? (y/n)y
Do you wish to add milk? (y/n)n
The total price for your order: RMnan
Please pay for your order!Thank you for ordering!
Last edited on
nan means not a number.

The ordering function takes two parameters, order and price, which the compiler thinks are long double, but order is actually an int. Then in the call on line 39, the order of the parameters is switched (order, price vs price, order).

line 14 long double ordering (long double, long double);
line 46 long double ordering (long double price, long double order)
line 39 price = ordering (order, price);

You declare a new local variable in the function instead of using the parameter sent in.
line 53 long double price = 2.50;


if (sugar == 'y', milk =='y')

If you want the both conditions to be true, use the logical AND operator && instead of the comma. if (sugar == 'y' && milk =='y') Although I'd probably try to find a more concise way to figure the pricing so you don't have a lot of repeating if/else statements.


You don't really need to be using long doubles in this coffee shop scenario. And I'd try to avoid global variables, except perhaps for constant values for drink prices, for example const double espresso = 2.50;


Just a thought, what if someone is ordering 3 espressos but they want different milk and sugar options? Or if they want to order a latte and a plain tea? Would they have to place multiple orders?
Topic archived. No new replies allowed.