在这种情况下,是否可以将两个单独的值返回给函数?

时间:2017-01-26 13:25:49

标签: c

我正在尝试确定用户输入文本文件的最小数量以及找到该数字的位置

尝试解决方案:我已尝试使用以下代码实现minIndex作为正确返回最小值的函数的一部分:

int minimum(int number, int *minIndex) {

static int minNumber = INT_MAX;
static int index = 0;

if (number < minNumber) {
    minNumber = number;
    *minIndex = index;
}
index++;
return minNumber;
}

编辑我稍后会实施:

    int minNumber = 0;
    int finished = 0;
    int minIndex = 0;
    int in = 0;

    for (int i = 1; !finished; i++)
{
    if (fscanf(fp, "%s", word) < 1)
        finished = 1;
    else {
        number = atoi(word);
        minNumber = minimum(number, &in);
        printf("\nstring  is \t %s\n", word);
        printf("integer is \t %d\n", number);
    }
}
printf("min number is %d at position %d\n", minNumber,in);

正确返回最小数字,但minIndex始终显示为1。

我的功能是否存在问题,或者我手边有哪些基本问题?

3 个答案:

答案 0 :(得分:4)

如果要返回两个值,则需要返回struct。我建议只使用它来保持计算状态而不是静态。

struct minimum_state {
  int minNumber;
  int minIndex;
  int index;
};

#define MINIMUM_STATE_INIT_VAL \
{ .minNumber = INT_MAX, .minIndex = -1, .index = 0 }

void minimum(int number, struct minimum_state *p_state) {

  if (number < p_state->minNumber) {
    p_state->minNumber = number;
    p_state->minIndex = p_state->index;
  }
  ++(p_state->index);

}

然后您的代码可以按如下方式重写:

struct minimum_state = MINIMUM_STATE_INIT_VAL;
while(next_number_exists()) {
  minimum(next_number(), &minimum_state);
}

答案 1 :(得分:1)

一个函数只返回1种类型。使它成为一个结构,并将你的2个整数放入其中。 或者返回1个元素并将其作为指针处理。

答案 2 :(得分:0)

说实话,我要做的是有两个功能(单一责任原则)。

然后,使用索引函数,如果需要该值,请使用array [minIndexValue]

所以选择选项1,如果你想要minValue,不要调用你的函数,只需通过它的索引访问它

在您的情况下,您的代码始终返回1,因为您似乎在此函数之外迭代所有数字,因此此函数的索引为1。