【问题标题】:How do I pass these values correctly?如何正确传递这些值?
【发布时间】:2013-04-30 16:58:04
【问题描述】:

我应该使用一个结构来存储机器中的饮料名称、饮料成本和饮料数量。我应该创建一个由五个结构组成的数组,其中的元素用名称、成本和数字初始化。该程序应显示饮料列表,用户应在第一个功能中进行选择(1-6)。选择被验证并按值传递回主例程。在第二个功能中,用户插入货币并显示找零金额,并且应该从机器中的饮料数量中减去一个,然后循环。当用户退出时,它会显示机器赚取的总金额。我的问题是将数组传递给函数。我以为我做对了,但是函数和数组到处都出现错误。有谁知道我将如何传递数组并从函数返回值?谢谢

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


struct Drink
{
string drinkName;
double cost;
int numberInMachine;
};

struct Drink options[] = {{"Cola", .75, 0}, {"Root Beer", .75, 2}, 
       {"Lemon-Lime", .75,     10},
                      {"Grape Soda", .80, 3}, {"Cream Soda", .80, 20}};

int getChoice(Drink, int);
void showTransaction(Drink&);

int main()
{
const int NUM_DRINKS = 5; // Number of drink options
Drink options[NUM_DRINKS];

getChoice(Drink, value);
showTransaction(choice);


system("pause");
return 0;
}

int getChoice(Drink, choice)
{
int choice;

cout << "Enter the number(1-6) of the drink you would like: " << endl;
cout << "Drink Name         Cost        Number in Machine " << 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 " << endl;

cout << " Enter the number of your selection: ";
cin >> choice;

while(choice != 1 && choice != 2 && choice != 3 && choice != 4 
          && choice != 5 &&     choice != 6)
{
    cout << "Please enter a valid number 1-6" << endl;
    cin >> choice;
}

return choice;
}

void showTransaction(choice)
{
double moneyIn;
double moneyOut;

if(choice ==1)
{
    cout << "Enter money inserted up to $1.00: ";
    cin >> moneyIn;
    while(moneyIn < options[0].cost)
    {
        cout << "Enter correct amount" << endl;
        cin >> moneyIn;
    }

    if(moneyIn > options[0].cost)
    {
        cout << "Your change is: " << (moneyIn - options[0].cost) << endl;
    }

}

}

【问题讨论】:

  • 您遇到了什么样的错误,您在哪一行代码中遇到了这些错误?
  • 存在一些语法错误,例如:int getChoice(Drink,choice) {...} Drink 的变量是什么,choice 的类型是什么?
  • @Robert Harvey 在我尝试进入函数时,它说Drink 和choice 是未定义的。我在函数 int getChoice(Drink,choice) 中有错误。它所说的选择在 showTransaction 中未定义且相同。所以这是我通过它的方式
  • 好的。请使您的标题更具体地针对您的特定问题;当前标题无法通过 Google 搜索。
  • 是的,请更新

标签: c++ arrays structure


【解决方案1】:

我已在您的代码中修复了一些问题。我已经评论了大部分内容;请通读一遍,并尝试理解我为什么拥有我所做的一切。

主要需要注意的是:

  1. 您在全局范围内声明了一个名为 options 的数组,因此无需将此数组传递给您的任何函数,因为它们可以访问它
  2. 在处理数组及其索引时,无需使用 if 语句来判断客户在说什么;我们可以使用选项 - 1 作为数组的索引(读完代码你就知道我在说什么了)

固定代码:

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

// Structure to hold information about drink
struct Drink
{
    string drinkName;
    double cost;
    int numberInMachine;
};

// Essentially the machine with information about what is in it
Drink options[] = {{"Cola", .75, 0}, {"Root Beer", .75, 2}, {"Lemon-Lime", .75, 10},{"Grape Soda", .80, 3}, {"Cream Soda", .80, 20}};

int getChoice();
double showTransaction(int);

int main()
{
    int choice;
    double moneyEarned = 0.0;

    // Figuring out what the cutomer chose
    choice = getChoice();

    // Figuring out how much money the machine earned
    moneyEarned = showTransaction(choice);

    cout << "The machine earned: $" << moneyEarned << "." << endl;
    return 0;
}

int getChoice()
{
    int choice;

    cout << "Enter the number(1-6) of the drink you would like: " << endl;
    cout << "Drink Name         Cost        Number in Machine " << endl; 
    cout << "1. Cola            .75         " << options[0].numberInMachine << endl;
    cout << "2. Root Beer       .75         " << options[1].numberInMachine << endl;
    cout << "3. Lemon-lime      .75         " << options[2].numberInMachine << endl;
    cout << "4. Grape Soda      .80         " << options[3].numberInMachine << endl;
    cout << "5. Cream Soda      .80         " << options[4].numberInMachine << endl;
    cout << "6. Quit " << endl;

    cout << "Enter the number of your selection: ";
    cin >> choice;

    while(choice < 1 || choice > 6)
    {
        cout << "Please enter a valid number 1-6" << endl;
        cin >> choice;
    }

    return choice;
}

double showTransaction(int choice)
{
    double moneyIn;

    // If there isn't enough drinks ie. more than 0, then we can't sell any
    if(options[choice-1].numberInMachine < 1)
    return 0.0;

    cout << options[choice-1].drinkName << "costs $" << options[choice-1].cost << "." << endl;
    cout << "Enter money inserted up to $1.00: ";
    cin >> moneyIn;

    // If they enter less money than we need
    while(moneyIn < options[choice-1].cost)
    {
        cout << "The entered money is not enough, Please enter more: ";
        cin >> moneyIn;
    }

    cout << "Your change is: $" << (moneyIn - options[choice-1].cost) << "." << endl;

    return moneyIn;
}

【讨论】:

  • 哦,谢谢!我只是不确定普通数组和结构数组之间的区别。谢谢,虽然它真的帮助我真正理解它
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2013-03-14
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多