将float打印为十进制并修复错误的输出

时间:2015-08-23 16:42:09

标签: c++

我正在尝试使用类,我编写了这个示例代码。用户输入他们的注册号和两个标记。输出应该是它们的寄存器号和两个输入标记的平均值。我有两个问题:

  1. 如果我使用构造函数,如何使用float类型以小数形式显示输出平均标记?

  2. 为什么寄存器号的输出不正确?代码如下。

    #include<iostream.h>
    #include<conio.h>
    
    class abc
    {
        int reg, mark1, mark2;
    
        public:
        int avg;
        abc(int reg, int mark1, int mark2)
        {
            avg = (mark1 + mark2) / 2;
        }
    
        void display()
        {
            cout<<"Your average mark is:\n"<<avg<<"\n";
            cout<<"Your Register Number is:\n"<<reg<<"\n";
        }
    };
    
    void main()
    {
        clrscr();
    
        int num, m1, m2;
    
        cout << "Enter your register number\n";
        cin >> num;
    
        cout << "Enter your Mark 1 and Mark 2:\n";
        cin >> m1 >> m2;
    
        abc s1(num,m1,m2);
        s1.display();
    
        getch();
    }
    
  3. 我得到了平均值(没有小数),寄存器号输出为11196

2 个答案:

答案 0 :(得分:1)

在C ++中,构造函数参数不会自动存储在类成员中。我会将您的类声明更改为以下内容,请注意我为成员和函数参数使用了不同的名称(我喜欢将class abc { int m_reg, m_mark1, m_mark2; public: int avg; abc (int reg, int mark1, int mark2) : m_reg(reg), m_mark1(mark1), m_mark2(mark2) { avg = (m_mark1+m_mark2)/2; } void display() { cout<<"Your average mark is:\n"<<avg<<"\n"; cout<<"Your Register Number is:\n"<<m_reg<<"\n"; } }; 用于私有成员变量)。

// The new declaration
double avg;

// In your constructor
avg = (double) (m_mark1 + m_mark2) / 2.0;

如果您希望结果为小数(而不是舍入或者是最接近的整数),则需要将平均声明和计算更改为:

(?<= )&&(?= )

答案 1 :(得分:0)

您需要做的就是在类构造函数中为 reg 属性添加值:

abc (int r, int mark1, int mark2)
{
    reg = r;
    avg = (mark1+mark2)/2;
}

除此之外,为什么avg是整数而不是double?考虑一下:

class abc
{
    int reg,mark1,mark2;
    public:
    double avg;

    abc (int r, int mark1, int mark2)
    {
        reg = r;
        avg = (double)(mark1+mark2)/2.00;
    }

    void display()
    {
        cout<<"Your average mark is:\n"<<(int)avg<<"\n";
        cout<<"Your Register Number is:\n"<<reg<<"\n";
    }
};

如果你希望4.4显示为4,而4.5为5则使用此hack:

avg = avg + 0.5;
cout << (int)avg << "\n";