2016-04-11 4 views
5

Napisałem ten kod:Procenty w obliczeniach

std::cout << "When did you graduate? "; 
int graduation_year = 0; 
std::cin >> graduation_year; 
std::cout << "\n"; 
std::cout << "How much is your student debt? "; 
double debt = 0; 
std::cin >> debt; 

std::cout << "You graduated in " << graduation_year << " and have student debt worth " << debt << ".\n"; 

double discount = 0; 

switch (graduation_year) { 
case 2010: 
{ 
    if (debt >= 5000 && debt < 10000) 
     double discount = .99; 
    double payment = debt * discount; 
    std::cout << "Your student debt is between 5000 and 10000 which means your payment would be " << payment << "\n"; 
} 
break; 

To nie jest dla przypisania szkolnego, ja po prostu stara się nauczyć C++ i próbuje się powiesić procenty i przełącznik/przypadek.

Nieznośno, kiedy zmienić tę część

double discount = .99; 
double payment = debt * discount; 

do

double payment = debt * 0.99; 

działa idealnie. Więc czuję, że coś może pójść nie tak z powodu podwójnego bycia < 1, ale nie mogę dla mojego życia dowiedzieć się, co to jest. Kod jest kontynuowany w przypadku 2011 itd., Ale daje dokładnie takie same problemy dla tej części kodu, więc pomyślałem, że zostawię to.

Odpowiedz

12

Jesteś ponownie deklarując zniżkę jako zmiennej wewnętrznej do bloku następnego if-oświadczenie

if (debt >= 5000 && debt < 10000) 
    double discount = .99; 

Należy napisać to tak:

if (debt >= 5000 && debt < 10000) 
    discount = .99; 

ETA: trochę wyjaśnienia.

zniżka deklaracja w jeśli bloku tymczasowo ukrywa globalnydyskontowej deklarację. Choć wartość jest poprawnie przypisany do wewnętrznej deklaracji zniżka, kiedy wyjść z jeśli bloku zmienna ta jest poza zakresem, a wszelkie dalsze odniesienia do zniżki został rozwiązany za pomocą globalnyzniżka deklaracja. Ponieważ nie zmieniłeś zmiennej globalnej, nie otrzymasz prawidłowego wyniku.

+0

Jezu, wiedziałem, że to musi być coś głupiego z mojej strony. Wielkie dzięki, zaoszczędziłeś mi dużo czasu. – Milan

+0

@ tobi303, zadeklarowałem zniżkę jako podwójny wcześniej, powyżej części przełącznika :) – Milan

+0

@Milan nie ma za co! :-) –

Powiązane problemy