好吧,我是初学者,这是我主修计算机科学的一年。我正在尝试从我的教科书中做一个练习,让我使用一个名为的结构,该结构MovieData
有一个构造函数,允许我在MovieData
创建结构时初始化成员变量。这是我的代码的样子:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
// struct called MovieData
struct MovieData
{
string title;
string director;
unsigned year;
unsigned running_time;
double production_cost;
double first_year_revenue;
MovieData() // default constructor
{
title = "Title";
director = "Director";
year = 2009;
running_time = 90;
production_cost = 1000000.00;
first_year_revenue = 1000000.00;
}
// Constructor with arguments:
MovieData(string t, string d, unsigned y, unsigned r, double p, double f)
{
title = t;
director = d;
year = y;
running_time = r;
}
};
// function prototype:
void displayMovieData(MovieData);
// main:
int main()
{
// declare variables:
MovieData movie, terminator("Terminator", "James Cameron", 1984, 120, 5000000, 2000000);
// calling displayMovieData function for movie and terminator
// so it will display information about the movie:
displayMovieData(movie);
displayMovieData(terminator);
return 0;
}
// displayMovieData function:
// It receives struct MovieData variable as
// an argument and displays that argument's
// movie information to the user.
void displayMovieData(MovieData m)
{
cout << m.title << endl;
cout << m.director << endl;
cout << m.year << endl;
cout << m.running_time << endl;
cout << fixed << showpoint << setprecision(2);
cout << m.production_cost << endl;
cout << m.first_year_revenue << endl << endl;
}
这是我收到的输出:
标题 导向器 2009 90 1000000.00 1000000.00 终结者 詹姆斯卡梅隆 1984年 120 -925596313493178300000000000000000000000000000000000000000000000.00 -925596313493178300000000000000000000000000000000000000000000000.00 按任意键继续 。. .
在 Microsoft Visual C++ 2008 Express Edition 上编译。
我的问题是,这是由于双数据类型的溢出而发生的吗?我什至尝试使用 long double 并发生同样的事情。即使我使用 5milproduction_cost
和 2mil 因为first_year_revenue
两个数字输出是相同的。使用我的默认构造函数正确打印出 1000000。在这种情况下我是否使用了正确的数据类型?我希望它是双倍的,因为它是一个货币数字,美元和美分。
感谢我提供的任何帮助。对不起我的长问题。这是我在 SO 上的第一篇文章,所以任何关于正确发布问题格式的反馈都会很棒,谢谢!