【问题标题】:C++ Void Function ConfusionC++ 空函数混淆
【发布时间】:2011-02-15 02:34:24
【问题描述】:

我正在做一项家庭作业,但我不知道方向要我为这些功能写什么。指示说:

编写一个名为 GetSalesInfo 的 void 函数,该函数接受用户的以下输入

  • 帐号
  • 销售日期
  • 县代码
  • 总销售额
  • 发货重量

这个函数应该将所有这些输入返回给调用函数 - 我对这部分最困惑

编写以下值返回函数:

  • CalcDiscount - 返回相应的销售折扣

我不明白第一个函数应该做什么,我已经设置了参数,但我不知道在实际函数中应该做什么。

void GetSalesInfo(int accNum,       // Account Number - IN
            int month,          // Month of sale - IN
            int day,            // Day of sale - IN
            int year,           // Year of sale - IN
            char countyCode,    // County Code - IN
            float total,        // Total Sale Amount (Before Tax) - IN
            int weight)         // Shipping Weight - IN
{

}

另外,我不知道如何访问 CalcDiscount 函数中的所有这些信息。

我没有要求任何人做我的作业,我只需要朝着正确的方向努力,我的教授永远不会帮助任何人。

【问题讨论】:

  • 这真是荒谬的措辞。
  • 似乎第一个函数应该将结构(或类)作为参数,然后从键盘读取用户输入,并填充传入的结构/类的字段。 CalcDiscount将采用相同的对象,并返回折扣(无论如何定义)

标签: c++ function


【解决方案1】:

嗯,它专门调用了一个 void 函数,这意味着它将通过返回值返回 nothing

C++ 的引用类型增强了 C 的执行方式(传递指向变量的指针,然后取消引用它们以在函数外更改它们):

void GetSalesInfo (int &accNum,
                   int &month,
                   int &day,
                   :
                   :

当您在函数中更改这些变量时,这将反映回您传入的变量中。

因此您的函数可以简单地输入来自用户的数据并将它们存储到这些变量中。然后,回到调用函数,您可以将它们传递给CalcDiscount,类似于:

float CalcDiscount (int accNum,
                    int month,
                    int day,
                    :
                    :

【讨论】:

  • 而且,为什么不赞成?除了使用指针或全局变量之外,没有其他方法可以做到这一点,如果你建议使用 C++,你可能不应该在这里:-)
  • 是的,问题是这样没有多大意义。您应该如何在没有输入参数的情况下返回该数据?您需要一些上下文才能检索信息。顺便说一句,我没有投反对票
  • downvote 是为了在它被标记为作业时放弃它。 129k,还在为积分哭泣。真可惜。
  • 上下文在问题中:“接受以下内容作为用户的输入”
  • @Crazy,我不是在为分数而哭泣,只是想得到最好的答案,包括如果你能证明他们错了就修复我的答案。我同意你为家庭作业提供完整的解决方案,我不喜欢 SO 被用作廉价的家庭作业服务。但是告诉别人如何使用参考并不是为他们做功课。我看到你明智地选择了你的绰号,年轻的学徒:-)
【解决方案2】:

我相信第一个函数应该使用 pass-by-reference。在数据类型之后放置一个 & 符号,对变量所做的任何更改都将对传递的变量进行,而不仅仅是它的副本。示例:

#include <iostream>

void increment(int& num) {
    num += 1;
}

int main(void) {
    int num = 0;
    increment(num);
    std::cout << num << std::endl;
    return 0;
}

【讨论】:

  • 是的,但这并不能完全解决我的问题。我觉得 GetSalesInfo 应该将您从用户那里获得的所有数据存储在主程序中,因此您只需输入一次所有内容。然后,您应该能够使用 CalcDiscount 中存储的数据来计算折扣。我想有点像一个物体,尽管我们还不知道它们是什么。但是自从我学会了所有这些东西已经有一段时间了,我很困惑我应该如何做到这一点。
  • 我想你的老师希望你在main()函数中定义一些变量,为它们输入值,处理值,然后输出。您的输入部分有问题。您需要做的是在 main() 中定义变量,将它们作为引用变量传递给函数,然后在函数内部使用 cin 填充值。填充后,main() 范围内的值将自动填充来自命令提示符的值。
  • @Alf P. Steinbach:void main() 在 MS 视觉工作室中编译。
  • @Michael,它绝对不能完全解决您的问题。另一方面,您确实声明“我只需要在正确的方向上稍微推动一下” - 这里的这个和其他答案推动。 Cosmic 正在向您展示如何使用引用类型来允许将变量更改反映回调用者。您只需要将新发现的知识应用到您自己的案例中。
  • 滚,C++0x,不需要这样的废话:-)
【解决方案3】:

我同意,它的措辞很糟糕。你显然不能从一个函数返回多个值,所以你有两个实际的选择。

  1. 返回一个封装所有这些值的数据对象(推荐,但可能不适合此家庭作业。
  2. 引用多个输出参数并在函数内分配它们。

函数声明没有意义。

另外,我不知道如何访问 CalcDiscount 函数中的所有这些信息。

这取决于您需要在哪里调用它。您可能会从 GetSalesInfo 中调用它。

【讨论】:

    【解决方案4】:

    很抱歉,但我认为您所做的摘要是错误的,您的老师希望函数接受这些值,即在 "cin" 中,因此您不会将这些值直接传递给函数。

    摘要会是这样的:

    void GetSalesInfo()
    {
      ////Code of the INPUT function here     
        * Account Number
        * Date of Sale
        * County Code
        * Total Sale
        * Shipping Weight    
    }
    
    void A()
    {
      GetSalesInfo();
    
      // Here this GetSalesInfo would be responsible for acceting the values and returning it to the calling function "A"
    
      //The values would be returned with use of pointers only as your Teacher won't allow global variables :D
    
      //Rest of the code goes here
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 2018-04-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多