Структуры, массивы, функции

Здесь новичок, имеющий некоторые трудности с отправкой аргументов моего структурированного массива в функцию. Похоже, мой основной кровопролитный компилятор не любит функции, которые я настроил. Я сделал некоторые улучшения с программой в целом, но боролся с этим часами. Я попытался посмотреть на сопоставимые программы на этом сайте, но ничего достаточно похожего для меня, чтобы точно определить ошибки. Моя функция инвентаризации состоит в том, чтобы отправить сообщение о том, что распродано, когда напиток, такой как кола = 0. Любая помощь будет принята с благодарностью. Я переместил определение своей функции снизу после int main вверх, чтобы очистить другую ошибку компилятора. Я открыт для любых отзывов по любой части этой программы, так как это задание класса, и я могу использовать указатели, чтобы добиться успеха в моем следующем тесте.
Спасибо

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

struct Soda
{
string name;
float  price;
int    inv;
};

void functInventory(Soda[],int);       //prototype

void functInventory(Soda drink[],int num)       //function definition
{
if ( drink[num].inv = 0)
cout << "SOLD OUT" <<endl;
}

int main()
{
const int option = 5;
string cola, rbeer, lemlime, grape, cream;

int InsAmount, choice;
int income = 0;

Soda array[option] =    {
{cola,   .75, 20},
{rbeer,  .75, 20},
{lemlime,.75, 20},
{grape, .80,   20},
{cream, .80,   20}
};

cout << "Please choose 1-6 " << endl;
cout    << " 1. Cola = $.75 " << endl;
cout  << " 2. Root Beer = $.75 "  << endl;
cout << " 3. Lemon Lime = $.75 " << endl;
cout  << " 4. Grape Soda = $.80 " << endl;
cout << " 5. Cream Soda = $.80 " << endl;
cout << " 6. QUIT & EXIT "       << endl;

switch(choice)
{
case 1:   array[0].inv - 1 = array[0].inv;
income = income + .75;
functInventory(array, choice);
break;

case 2:    array[1].inv - 1 = array[1].inv;
income = income + .75;
functInventory(array, choice);
break;

case 3:    array[2].inv - 1 = array[2].inv;
income = income + .75;
functInventory(array, choice);
break;

case 4:    array[3].inv - 1 = array[3].inv;
income = income + .80;
functInventory(array, choice);
break;

case 5:    array[4].inv - 1 = array[4].inv;
functInventory(array, choice)
income = income + .80;
break;

case 6:  cout << "The total amount earned is: $" << income <<endl;
break;

default:
cout <<  "Please enter a capital letter from 1-6 " << endl;
}

cout << "Please Tell Me How Much Money You Are Inserting:  " <<endl;
cin  >> InsAmount;

change = InsAmount - .75;        //I will work on creating a more accurate function 4 change
cout << "your change is " << change; << "  "<< endl;
return 0;

}

0

Решение

Ты сказал Кровопролитие? Я думаю, что это основано на gcc: включить предупреждения, например, -W -Wall и, возможно, другие! Это сказало бы вам, что это, вероятно, не то, что вы хотели сделать:

if ( drink[num].inv = 0)

Это задание, а не сравнение! Ты наверное имел ввиду

if (drink[num].inv == 0)

… или, чтобы предотвратить случайное = испортить вашу логику

if (0 == drink[num].inv)

… потому что это приведет к ошибке компилятора, если вы попытаетесь использовать присваивание. Я не проверял другие ошибки, но это кажется очевидной. Поскольку это моя недавняя привычка, я также укажу, что вы не должен использовать std::endl.

Глядя немного дальше в коде: это даже не должно компилироваться:

array[0].inv - 1 = array[0].inv;

Результаты выражения array[0].inv - 1 это временный встроенный тип, и я не думаю, что вы можете назначить этому типу (и он, безусловно, завершается ошибкой, когда я пытаюсь скомпилировать код; когда я пытаюсь скомпилировать его, он красиво выдает предупреждение о проблеме, о которой я упоминал выше) ,

1

Другие решения

Ошибки, которые вы получаете от компилятора, вероятно, похожи на следующие:

test2.cpp: 46: 46: ошибка: в качестве левого операнда присваивания требуется lvalue

В вашей инструкции switch ваши операторы присваивания (первая строка в каждом случае) имеют значение слева от знака равенства, а не справа. Это как сказать:

int my_age;
26 = my_age;

который не собирается работать. Переменные здесь ваши значения.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector