我正在尝试确定用户输入文本文件的最小数量以及找到该数字的位置
尝试解决方案:我尝试使用以下代码将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 %sn", word);
printf("integer is t %dn", number);
}
}
printf("min number is %d at position %dn", minNumber,in);
最小数字正确返回,但minIndex
始终显示为 1。
我的功能是否有问题,或者我缺少更基本的问题?
如果要返回两个值,则需要返回一个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 个类型。使其成为结构并将您的 2 个整数放入其中。或者返回 1 个元素并将 1 个作为指针处理。
老实说,我要做的是有两个功能(单一责任原则)。
然后,使用你的索引函数,如果你想要这个值,使用array[minIndexValue]
所以选择选项 1,如果你想要 minValue,不要调用你的函数,只需通过它的索引访问它
在您的情况下,您的代码始终返回 1,因为您似乎正在迭代此函数之外的所有数字,因此此函数的索引为 1。