【问题标题】:(C++) Simple issue to do with structs and function parameters(C++) 结构体和函数参数的简单问题
【发布时间】:2015-03-18 22:51:02
【问题描述】:

结构问题1.cpp

    // Struct Problem 1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include "structs.h"

double calculateEarnings(Advertising aDay);
void displayEarnings(int questionInstance, Advertising aDay);
void mainQuestions();

int _tmain(int argc, _TCHAR* argv[])
{
    mainQuestions();
    return 0;
}

double calculateEarnings(Advertising aDay)
{
    std::cout << aDay.usersClicked; //debug
    return aDay.totalAdsShown * aDay.usersClicked * aDay.averagePerAd;
}

void takeInData(int questionInstance, Advertising aDay)
{
    if (questionInstance == 0)
    {
        std::cin >> aDay.totalAdsShown;
    }
    else
        if (questionInstance == 1)
        {
            std::cin >> aDay.usersClicked;
        }
        else
            if (questionInstance == 2)
            {
                std::cin >> aDay.averagePerAd;
            }
    std::cin;
}

void mainQuestions()
{
    static Advertising aToday;
    aToday.totalAdsShown = 0;
    aToday.usersClicked = 0.00;
    aToday.averagePerAd = 00.00;

    std::cout << "Welcome! Please input the advertising data for today." << "\n";
    std::cout << "How many ads were shown today?" << "\n";
    takeInData(0, aToday);
    std::cout << "What percentage of users clicked our ads? (decimal form)" << "\n";
    takeInData(1, aToday);
    std::cout << "What were the average earnings per ad? (ex: 5.15)" << "\n";
    takeInData(2, aToday);

结构体.h

    #ifndef STRUCTS_H
#define STRUCTS_H

typedef double percentage;
typedef double USD;

struct Advertising
{
    int totalAdsShown;
    percentage usersClicked;
    USD averagePerAd;
};

#endif

基本上,当被 'cin' 调用时,数据不会被保存。我添加了一行来打印 aDay.usersClicked 值,它打印为 0。我正在学习 c++,所以问题很基本。我感谢所有提示!

谢谢

【问题讨论】:

    标签: c++ function struct parameters


    【解决方案1】:

    改变这个:

    void takeInData(int questionInstance, Advertising aDay)
    

    进入这个:

    void takeInData(int questionInstance, Advertising& aDay)
    

    它会起作用的。原因是在您的版本中,参数aDay 是按值传递的;即参数的 copy 被传递给函数。因此,takeInData() 对其版本的aDay 所做的任何事情都在副本中完成。 takeInData() 返回后,副本(以及其中的信息)丢失。

    在编辑后的版本中,对aDay 的引用被传递给函数。现在它将引用被传递的变量,即main() 中的变量。现在takeInData() 所做的所有事情都存储在main() 中实际声明的值中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2011-02-27
      • 2022-11-29
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多