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

标签 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();
    }
    

我正在获取平均值(没有小数点)并且寄存器编号输出为 11196

最佳答案

在 C++ 中,构造函数参数不会自动存储在类成员中。我会将您的类声明更改为以下内容,请注意我为成员和函数参数使用了不同的名称(我喜欢将 m_ 用于私有(private)成员变量)。

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;

关于c++ - 将 float 打印为十进制并修复错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169008/

相关文章:

c++ - 如何解决未正确弹出的 #pragma 禁用警告问题

c++ - cLion & cMake 不调试/打印错误

c++ - 子类中的类模板非类型成员访问

c++ - 哪个 C++ STL 容器提供 `extract_max()` 、 `find(element_value)` 和 `modify(element)` 功能?

c++ - 为什么只能在头文件中实现模板?

c++ - 将 boost shared_ptr 转换为 void*,反之亦然

c++ - OpenCV:一种简单明了的灰度图像着色方法

c++ - 用单个空格分割字符串

c++ - C++ 中二元谓词的求值

C++自定义类型 vector 优化