2016-09-25 8 views
0

Я немного новичок в C++, и я делаю эту небольшую программу для расчета общей суммы билетов на кино.Почему я получаю нуль вместо этого?

#include<iostream> 
#include<string> 
#include<iomanip> 
#include<cmath> 

using namespace std; 

int adultTick, childTick; 
const int aPrice = 14; 
const int cPrice = 10; 
float rate() { 
    const double RATE = .20; 
    return RATE; 
} 

double grossTotal = (aPrice * adultTick) + (cPrice * childTick); 
int main() { 

    cout << "Box Office Earnings Calculator ....\n" << endl; 
    cout << "Please Enter the Name of the Movie: "; 
    string movie_name; 

    getline(cin, movie_name); 


    cout << endl << " \" \" " << "adult tickets sold: "; 
    cin >> adultTick; 

    cout << " \" \" " << "child tickets sold: "; 
    cin >> childTick; 

    cout << endl << setw(10) << left << "Movie Title: " << setw(20) << right << " \" " << movie_name << " \" " << endl; 
    cout << setw(10) << left << "Adult Tickets Sold: " << setw(20) << right << adultTick << endl; 
    cout << setw(10) << left << "Child Tickets Sold: " << setw(20) << right << childTick << endl; 
    cout << setw(10) << left << "Gross Box Office Profit: " << setw(20) << right << "$ " << grossTotal; 


} 

В самом конце, где программа должна отображать общее количество? Я думал, что Арифметика правильная, но я не понимаю, почему она непрерывно отображает нуль? Что я могу делать неправильно? Он работает, если я не создаю переменную для арифметики «grossTotal», но мне нужно продолжить форматирование с помощью функции «setprecision» и «fixed».

ответ

2

Код в main не изменяется grossTotal.

Декларация

double grossTotal = (aPrice * adultTick) + (cPrice * childTick); 

& hellip; создает переменную grossTotal с заданным начальным значением. Он не объявляет связь между значениями этих переменных.

В то время выражение инициализатор (справа) = оценивается adultTick и childTick равны нулю, так как переменные области видимости пространства имен они были инициализированы нулевым.

+0

Не уверен, но главное, что декларация не указывает отношения, она определяет только начальное значение. –

1
int adultTick, childTick; 

Показанный код объявляет эти переменные в глобальной области действия, и эти переменные получают нуль-инициализацию.

double grossTotal = (aPrice * adultTick) + (cPrice * childTick); 

Показанный код также объявляет эту переменную в глобальной области, и расчетная формула вычисляет значение 0, так что эта переменная будет установлен в 0.

cout << setw(10) << left << "Gross Box Office Profit: " << setw(20) << right << "$ " << grossTotal; 

И эта линия в main() Отображает значение grossTotal переменной, которая, конечно же, 0.

это правда, что до этой линии, предшествующий код в main() наборов adultTick и childTick. Что не имеет никакого значения, так как уже было инициализировано значение grossTotal.

Вам необходимо изменить код, чтобы main() вычислил значение grossTotal, после того как эти другие переменные установлены.