0

这是一个交易或不交易游戏。

所以在我的主要功能中,我这样调用我的 casesort 方法:

casesort(cases);

我的方法看起来像这样,我已经意识到这不是最有效的方法,但我会使用我所知道的:

void casesort(float cases[10])
{
int i;
int j;
float tmp;
float zero = 0.00;

for (i = 0; i < 10; i++)
{
    for (j = 0; j < 10; j++)
    {
        if (cases[i] < cases[j])
        {
            tmp = cases[i];
            cases[i] = cases[j];
            cases[j] = tmp;
        }
    }
}

//Print out box money amounts
printf("\n\nHidden Amounts: ");
for (i = 0; i < 10; i++)
{
    if (cases[i] != zero)
        printf("[$%.2f] ", cases[i]);
}

}

因此,当我回到我的主目录时,结果发现数组已排序。我认为 void 会阻止该方法返回排序数组。我需要打印出实际的案例编号,我只需跳过任何填充了 0.00 的案例即可。但是在第一轮案例选择之后,我会在我的 MAIN 中打印出“5, 6, 7, 8, 9, 10”。我需要它根据挑选的内容打印案例。我觉得这是一个简单的修复,只是我对 C 细节的了解仍在增长。有任何想法吗?

4

5 回答 5

1

返回类型void与防止数组被排序无关。它只是说该函数不返回任何内容。

您会看到传递的数组本身受到影响,因为数组在传递给函数时会衰减为指针。制作数组的副本,然后传递它。这样你就有了原始列表。

于 2013-09-18T21:57:41.287 回答
0

好吧,制作您输入的本地副本并对其进行排序。像这样的东西:

void casesort(float cases[10])
{
    float localCases[10];
    memcopy(localCases, cases, sizeof(cases));
    ...

然后localCases用来做你的排序。

于 2013-09-18T22:06:03.253 回答
0

在 C 中,数组是通过引用传递的。即它们作为指向第一个元素的指针传递。因此,当您将案例传递给您的函数时,您实际上是在为它提供要修改的原始数组。尝试创建一个副本并对副本进行排序,而不是对实际数组进行排序。创建副本也不错,因为您只有 10 个浮点数。

于 2013-09-18T22:00:00.727 回答
0

如果您实际上正在使用 c++,请考虑使用 qsort() 或 std::sort() 而不是滚动自己的排序

有两个明显的解决方案。1)制作数组的副本并对副本进行排序(简单,浪费一些内存,这些天可能不是问题)。2)创建一个并行整数数组并执行索引排序,即,不是对原始事物进行排序,而是对索引进行排序,然后在需要排序版本时使用索引取消引用数组,否则使用原始未排序数组。

于 2013-09-18T22:00:09.717 回答
0

如果您不希望数组内容受到影响,那么您必须创建数组的副本并将其传递给您的排序例程(或在例程本身中创建副本)。

C 中的数组是不同的™;在这里查看我的答案以获得更详细的解释。

于 2013-09-18T22:08:36.770 回答