0

该程序运行顺利,编译时我没有错误或警告,就在它得到最终结果时,无论我输入什么,我都会得到一堆随机的字母和数字。

这是代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
     int hold;
     int n;
     int * result = new int;
     int * price = new int;
     std::string items[6];

        for (n=0; n<6; n++)
        {
            cout << "Item#" << n+1 << ": ";
            cin >> items[n];
        }
        cout <<  "\nYou Entered: ";
        for (int n=0; n<6; n++)
            cout << items[n] << ", ";

    for (n=0; n<6; n++)
    {
        if (items[n] == "ab"){
        price[n] = 2650;
        }

        else if (items[n] == "ae"){
        price[n] = 1925;
        }

        else if (items[n] == "ie"){
        price[n] = 3850;
        }

        else if (items[n] == "bt"){
        price[n] = 3000;
        }

        else if (items[n] == "pd"){
        price[n] = 2850;
        }

        else if (items[n] == "ga"){
        price[n] = 2600;
        }

    }

    for (n=0; n<6; n++)
    {
     result += price[n];
    }

    cout << "\nTotal gold for this build: " << result;
    cin >> hold;
    return 0;
}
4

5 回答 5

3
int * price = new int;

int * result = new int;

分别分配一个int。你可能的意思是new int[6]

但话又说回来,你应该std::vector改用。

我真的很失望你没有从 - https://stackoverflow.com/a/12868164/673730那里得到建议- 如果你有,你现在不会有这个问题。这不是一个好的学习方法。

于 2012-10-13T15:15:15.767 回答
1

使用此声明:int * price = new int;您只为单个 分配空间int,但您继续price用作int.

要声明一个数组,请使用:int *price = new int[5];

至于result,您将其声明为指向intalso 的指针,但稍后您将其用作int: result += price[n];。无需result成为指针。另请注意,您需要明确初始化变量:result在开始使用之前设置为零。

于 2012-10-13T15:15:28.010 回答
1

只是给一些意见:

  1. 新操作符应与删除一起使用。
  2. 您声明的“int *result”是指向 int 的一个点,因此您应该取消引用该点以获得您想要的结果。
  3. 应考虑例外情况,如果输入字母不在您的给定列表中怎么办?
于 2012-10-13T15:52:12.020 回答
0

嗯,result是一个int *. 这种变量通常存储另一个整数变量的地址,new int在这种特定情况下你会得到它。然而,随着

 result += price[n];

您将修改该地址,如果您实际从*result. 这也是你输出奇怪的原因:

cout << "\nTotal gold for this build: " << result;

这将打印存储在结果中的地址,而不是值。制作result一个整数,它应该可以工作。

请注意,price也应该更改,请参阅Luchian 的回答

锻炼

  1. 更改您的代码,以便不使用new.
  2. 您的程序仍然可能失败。的初始值是result多少?
  3. 如果用户提供的代码不在您的列表中,会发生什么?
于 2012-10-13T15:17:44.763 回答
0

换行:

cout << "\nTotal gold for this build: " << result;

cout << "\nTotal gold for this build: " << *result;

Result是一个指针,因此您需要使用 * 运算符取消引用它;

编辑:price将数组的声明更改为

int *price = new int[6];

前面的声明声明了一个变量,而不是一个数组

于 2012-10-13T15:18:49.580 回答