2014-02-11 4 views
0

중첩 된 while 루프에 문제가 있습니다. 내가 아래의 코드를 실행하면 출력 된 테이블의 첫 번째 줄에는 예상 값이 표시되지만 두 번째에는 표시되지 않습니다. 나는 그것이 단지 balance 변수를 재설정하는 문제라고 생각했지만 성공하지 못했습니다.잔액이 루프 외부에서 재설정되지 않습니다.

while(rate_counter < 10) 
{   
    rate_counter = rate_counter + 1; 
    cout << rate; 

    while(time_counter < 6) 
    { 
     time_counter = time_counter + 1;      
     balance = investment * pow((1+ rate/100),time);     
     cout << "\t\t" << setw(10) << balance;  
     time = time + time_increment; 
    } 

    cout << endl; 
    balance = 0;  

    time_counter = 0; 

    rate = rate + rate_increment; 
    time = time + time_increment; 

}   
cout << endl;    
return 0; 
} 

출력 :

Rate    5 Years  10 Years  15 Years  20 Years  25 Years  30 Years 
5.00   1276.28   1628.89   2078.93   2653.30   3386.35   4321.94 
5.50   8513.31  11126.55  14541.96  19005.76  24839.77  32464.59 

문제점 (여기 후속 라인) 제이다 읽어야한다.

5.50   1306.96 1708.14 2232.48 2917.76 3813.39 4983.95 
+3

'balance'값만 내부 루프 안에 설정합니다. 그것은 두 루프 외부에서 선언 된 것으로 보이므로 왜 그것이 재설정 될 것이라고 기대하십니까? –

+0

@ZacHowland 사용되기 전에 내부 루프 내부에서 설정됩니다 (후속 반복에 대해 재설정 됨). 어디에서 재설정해야합니까? – clcto

+2

@clcto 그가 반복 사이에 다른 값을 가질 것으로 기대한다면, 그것은 그가 알아 내야 할 질문입니다. 그러므로 제 질문입니다. –

답변

1

거의 틀린 것입니다. 문제는 balance이 재설정되지 않고 (사용되기 전에 내부 루프 내부에서 설정 됨) 0이 아니라 time이 재설정되지 않는 것입니다. 대신

//... 
rate = rate + rate_increment; 
time = time + time_increment; 

의 당신은 초기 값으로 시간을 재설정 할 :

//... 
rate = rate + rate_increment; 
time = time_increment; 
// or maybe 
// time = 0; 
1

당신은가에 대한 루프 구문이 루프를 유지하기 위해 쉽게 찾을 수 있습니다

unsigned int starting_rate = 500; 
unsigned int ending_rate = 1050; 
unsigned int rate_increment = 50; 

unsigned int starting_time = 5; 
unsigned int ending_time = 30; 
unsigned int time_increment = 5; 

for (unsigned int i = starting_rate; i <= ending_rate; i += rate_increment) 
{ 
    double rate = i/100.0; 
    double balance = 0.0; 
    std::cout << rate; 
    for (unsigned int time = starting_time; time <= ending_time; time += time_increment) 
    { 
     balance = investment * std::pow((1 + rate/100), time); 
     std::cout << "\t\t" << std::setw(10) << balance; 
    } 
    std::cout << std::endl; 
} 

기능적으로는 동일하지만 모든 루프 유지 관리가 함께 수행됩니다 (루프에서 수행하는 논리와는 별도).

+0

+1 좋은 제안. – clcto

관련 문제