2015-03-18 90 views
0

STRUCT问题1.cpp(C++)的简单问题做与结构和功能参数

// 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); 

structs.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++,所以这个问题是非常基本的。我欣赏所有提示!

谢谢

回答

2

更改此:

void takeInData(int questionInstance, Advertising aDay) 

到这一点:

void takeInData(int questionInstance, Advertising& aDay) 

,它会工作。原因是在你的版本中,参数aDay是通过价值传递的;即参数的拷贝被传递给该函数。因此,takeInData()对其版本aDay所做的任何操作均在副本中完成。在takeInData()返回后,副本(及其中的信息)丢失。

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