找到最小数字并打印它的功能

时间:2017-01-26 10:08:38

标签: c

一个非常基本的(也是令人尴尬的)问题,我还没有解决。

我创建了一个函数minimum,在调用时,它应该显示用户输入文件的最小整数。我也在使用atoi

工作职能如下:

int minimum(int number) {

static int minNumber = INT_MAX;

if (number < minNumber) {
    minNumber = number;
}
return minNumber;

}

接下来,当我从我的文件中读取用户已输入这些整数时,我稍后在程序中调用该函数。

编辑我现在使用以下建议的正确代码

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

解决了 - 我的问题是number始终将我的上一个输入作为最小的输入。

让我们说我也想显示这个整数的索引,从而确定最小数字的位置。正在创建另一种功能吗?或者这可以通过改变现在的功能来完成吗?

2 个答案:

答案 0 :(得分:2)

当您致电minimum() minNumber的值始终为INT_MAX时,请使用static

void minimum(int number) {
    static int minNumber = INT_MAX;

    if (number <= minNumber) {
        minNumber = number;
    }
    printf("min number is %d\n", minNumber);
}

或将minNumber传递给函数:

void minimum(int number, int *minNumber) {
    if (number <= *minNumber) {
        *minNumber = number;
    }
    printf("min number is %d\n", *minNumber);
}

int minNumber = INT_MAX;
for (int i = 1; !finished; i++)
{
     ...
     // As pointed out by @YuriyIvaskevych, you need to compare
     // the number in each iteration of the for loop
     number = atoi(word);
     minimum(number, &minNumber);
     ...
}

答案 1 :(得分:0)

for位于循环的 之外,所以基本上只检查最后一个输入。

但是在minimum()循环中移动它仍然无法解决问题:每次调用INT_MAX时,只需将其与初始化为< INT_MAX的局部变量进行比较,然后显然返回得到的数字(因为每次都是minNumber

首先:正如@WhozCraig在评论中已经提到的那样,创建minimum可见static int minNumber = INT_MAX;函数,但对每次调用都是一样的:minimum

int minimum(int number) { static int minNumber = INT_MAX; if (number < minNumber) { minNumber = number; } return minNumber; // return a minimum for later print it out } 函数现在看起来像这样:

printf

请注意,我删除了对minNumber的通话,因为它会在每次通话时打印出int minNumber = 0

让我们存储到目前为止我们找到的最低价值:

for循环

之前

... else { number = atoi(word); minNumber = minimum(number); // now we call it for every input printf("\nstring is \t %s\n", word); printf("integer is \t %d\n", number); } ...

现在在循环中:

printf("min number is %d\n", minNumber);

现在只需将其打印出来:

{{1}}

顺便说一句,还有另一种方法是按照@KeineLust

的建议传递一个指针