一个非常基本的(也是令人尴尬的)问题,我还没有解决。
我创建了一个函数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
始终将我的上一个输入作为最小的输入。
让我们说我也想显示这个整数的索引,从而确定最小数字的位置。正在创建另一种功能吗?或者这可以通过改变现在的功能来完成吗?
答案 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
的建议传递一个指针