为什么我的程序会产生奇怪的结果?

时间:2017-09-04 15:12:01

标签: c++

以下代码段是头文件和实际的main()函数。我在Windows 10中使用Visual Studio 2017。

·H

#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <iostream>
using namespace std;
struct Sales_data
{
    int amount;
    int rate;
    int price = amount * rate;
};
#endif

的.cpp

#include <iostream>
#include "Sales_data.h"
using namespace std;
int main()
{
    Sales_data item1;
    cout << "Enter rate and amount" << endl;
    cin >> item1.rate >> item1.amount;
    cout << item1.price << endl;
    cin.get();
    cin.get();
    return 0;
}

它一直显示为输出:“687194768”。

我也尝试过初始化变量,但似乎没有用。

4 个答案:

答案 0 :(得分:3)

你可能想要的是:

struct Sales_data
{
    int amount = 0;
    int rate = 0;

    int price() const { return amount * rate; }
};

然后

std::in >> item1.rate >> item1.amount;
std::cout << item1.price() << std::endl;

答案 1 :(得分:2)

此处的价格仅在初始化时计算以获得其初始值,但由于amountrate尚未初始化,结果为 undefined 它不是一个功能。

struct Sales_data
{
    int amount;
    int rate;
    int price = amount * rate;
};

你很可能想要一个功能,例如:

struct Sales_data
{
    int amount;
    int rate;
    int calcPrice()
    {
        return = amount * rate;
    }
};


std::cout << item1.calcPrice() << std::endl;

或者您必须重构以初始化amountrate以使用此类语法,例如:用构造函数。

struct Sales_data
{
    int amount;
    int rate;
    int price = amount * rate;
    Sales_data(int amount, int rate) : amount(amount), rate(rate) {}
};


Sales_data x(10, 5);
//x.price == 50

答案 2 :(得分:0)

代码打印的原因是因为您使用未初始化的变量计算该价格......

在struct中定义一个函数,并在给出输入后调用它

void calculatePrice() {
    price = amount * rate;
}

cin >> item1.rate >> item1.amount;
item1.calculatePrice();
cout << item1.price << endl;

答案 3 :(得分:0)

正如其他人所评论的那样,Sales_data的定义在初始化之前使用amountrate。这是未定义的行为,您的编译器或多或少可以随心所欲地做任何事情。

许多编译器会使用某种可识别的保护值(一种流行的选择是0xDEADBEEF)初始化变量,以便在使用调试器查看值时未使用该值时非常明显。在这种情况下,看起来你的编译器使用0xCCCCCCCC作为保护值:

(lldb) p (int) 0xcccccccc * (int) 0xcccccccc (int) $2 = 687194768