2017-10-19 2 views
0

안녕하세요 저는 학교 생활을하고 있으며 totalJobCost 기능을 작동시키는 방법을 알지 못합니다.페인트 작업 견적 도구 C++

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

using namespace std; 

void space(double paintarea, double paintcost, double paintneeded, double totalpaint); 
void cost(double hrs, double hrcost, double spacetopaint); 
void totalJobCost(double allTheirPaintCost, double allTheirWages, double theirTotalJobCost); 


const double AREA_FORMULA = 220.00; 
const double AREAFORMULA_PAINT = 1.00; 
const double AREAFORMULA_HOURS = 8.00; 
const double AREAFORMULAHOURS_WAGES = 35.00; 

int main() 
{ 
    double areaTP; 
    double paintCST = 0; 
    double paintNeeded = 0; 
    double allPaintCost = 0; 
    double hoursNeeded = 0; 
    double hoursWages = 0; 
    double allWages = 0; 
    double allJobCost = 0; 

    cout << "Enter the square footage you need to paint, then press enter" << endl; 
    cin >> areaTP; 

    cout << "Enter the price by gallons of paint you will use, then press enter" << endl; 


    cin >> paintCST; 
    while (paintCST < 10) 
    { 
     cout << "Enter the price by gallons of paint you will use, then press enter. cannot be less than 10 :"; 
     cin >> paintCST; 
    } 

    space(areaTP, paintCST, paintNeeded, allPaintCost); 

    cost(hoursNeeded, hoursWages, areaTP); 


    totalJobCost(allPaintCost, hoursWages, allJobCost); 


    system("Pause"); 

    return 0; 
} 

void space(double paintarea, double paintcost, double paintneeded, double totalpaint) 
{ 

    paintneeded = paintarea/AREA_FORMULA * AREAFORMULA_PAINT; 
    totalpaint = paintneeded * paintcost; 

    cout << "How many gallons of paint you will need: " << paintneeded << endl; 
    cout << "Your total paint cost will be: " << totalpaint << endl; 
} 

void cost(double hrs, double hrcost, double spacetopaint) 
{ 

    hrs = (spacetopaint/AREA_FORMULA) * AREAFORMULA_HOURS; 
    hrcost = hrs * AREAFORMULAHOURS_WAGES; 

    cout << "The number of hours for the job will be: " << hrs << endl; 
    cout << "The total amount of wages will be: " << hrcost << endl; 

} 

void totalJobCost(double totalpaint, double hrcost, double theirTotalJobCost) 
{       
    theirTotalJobCost = totalpaint + hrcost; 

    cout << "The total price of your paint job will be: " << theirTotalJobCost << endl; 
} 

답변

1

당신이 필요합니다 : 다른 기능은 문제없이 작동하지만 난 totalJobCost 여기 totalJobCost 출력을 0으로 잡아 위해 그들이 다시 메인에 var에 전달된다 생각하지 않는다 내가 사용하고있는 코드입니다 귀하의 주장 (totalpainthrcost)을 참조로 선언하십시오.

현재 space()cost()은 호출시 totalpainthrcost 사본을 만들어 업데이트 한 다음 인쇄합니다. 그러나 함수가 반환되면 totalpainthrcost에 저장된 값은 손실됩니다. 다음과 같이

이 문제를 해결하려면, 당신은 그 함수를 선언해야합니다

void space(double paintarea, double paintcost, double paintneeded, double& totalpaint) 

void cost(double hrs, double& hrcost, double spacetopaint) 

space() 또는 cost()가에서 작동 할 때 totalpaint 또는 hrcost로 통과 어떤 변수 이제이 업데이트됩니다.

+1

작동 해 주셔서 감사합니다.하지만 double & works가 어떻게되는지 설명해 주시겠습니까? (예 : main) –

+0

함수'space()'는, 예를 들어, 함수의'allPaintCost'의 값을 변경하기 만합니다. ('main()')에서 실행되는 함수입니다. – frslm

+0

double은 & nbsp 아래 코드 예제를 그냥 간략하게 표현한 것입니다. 포인터 재 할당을 허용하지 않는 것과 같은 몇 가지 안전 기능이 추가되었습니다. –

1

이것은 전달 바이 패스 대 참조 전달 문제입니다.

C++에서

, 부울, 문자, 정수 숫자, 부동 소수점 숫자, 배열, 클래스를 포함한 문자열,리스트, 사전, 세트, ​​스택, 큐 및 열거 값 유형입니다 반면, 참조 및 포인터 은 참조 유형입니다.

CPP reference

사용하고있는 변수는

복식 (배정 밀도 부동 소수점)입니다, 그래서 그들은 값 유형입니다. 값 유형 변수를 매개 변수로 함수에 전달하면 변수의 현재 값이 호출 한 함수의 호출 스택에 복사됩니다. 함수 안에 들어가면 매개 변수 이름은 복사 된 값에 액세스하는 데 사용하는 이름입니다. 이러한 복사 된 값에 어떤 작업을 수행해도 함수에 전달한 원래 변수의 값에는 영향을 미치지 않습니다. C/C++의 함수 범위와 호출 스택 아키텍처에 대해 읽어보십시오.

함수 호출에서 변수 값을 변경하려면 메모리의 해당 위치에 대한 참조를 전달해야합니다. 함수의 처음 몇 줄에 변수를 선언하면 메모리의 해당 위치가 해당 함수의 호출 스택의 일부가되며 원래 함수 내에서 호출 된 모든 함수 호출에서 해당 메모리에 안전하게 액세스 할 수 있습니다. 따라서 다음 작업을 수행 할 수 있습니다.

int main() { 
    double variable = 0; 
    function(&variable); 
    cout << variable; 
} 

void function(double* variable_address) { 
    *variable_address = 1.5; 
} 

여기에는 참조 연산자가 포함됩니다. C/C++의 기본 함수 호출 및 메모리 아키텍처에서 어떤 일이 벌어지고 있는지 알면이 정보가 너무 많지만 참조로 전달하고 값으로 전달하는 것이 더 쉽습니다.

+0

감사합니다. 덕분에 함수 전반에 걸친 변수를 이해할 수있었습니다. –