【发布时间】:2021-09-11 06:21:06
【问题描述】:
我正在尝试查找数组的最小元素,我认为我做对了,但是我收到 0 作为我的最小元素,但是,我没有为数组的任何元素输入 0。 我知道这里有些事情做得不好,但这是我的全部代码,以便可重现和修复。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main(){
char input[500];
printf("Enter a list of whitespace-separated real numbers terminated by EOF or 'end'.");
puts("");
printf("-----------------------------------------------------------------------------");
puts("");
gets(input);
int size = strlen(input);
int elements[size];
int i = 0;
char *p = strtok(input," ");
while( p != NULL)
{
elements[i++] = strtol(p, NULL, 10);
p = strtok(NULL," ");
}
//NUM OF ELEMENTS
int numOfElements = 0;
for(int j = 0; j < i; j++){
elements[j] = numOfElements++;
}
//MIN ELEMENT
int min = INT_MAX;
for(int k = 0; k < i; k++){
if(elements[k] < min){
min = elements[k];
}
}
printf("-----------------------------------------------------------------------------\n");
printf("# of Elements: %d\n", numOfElements);
printf("Minimum: %d\n", min);
return 0;
}
结果:
Enter a list of whitespace-separated numbers.
-----------------------------------------------------------------------------
1 2 3 4 5
-----------------------------------------------------------------------------
# of Elements: 5
Minimum: 0
预期:
Enter a list of whitespace-separated numbers.
-----------------------------------------------------------------------------
1 2 3 4 5
-----------------------------------------------------------------------------
# of Elements: 5
Minimum: 1
【问题讨论】:
-
什么是
i?需要minimal reproducible example。 -
@Shawn 数组中值的数量,本例中为 5。与数组长度相同。
-
first of u 不需要 else 部分,它只会在每次大于 min 的情况下将其分配给 element 中的第一项。你可以在 min = element[k] 之后的 if 中运行
printf("inside if %d", min)来查看它是否进入内部吗?和一个printf("in loop")for 循环,看看它是否工作正常 -
感谢您添加实际代码。您得到的最小值为 0,因为这就是您将数组的第一个元素设置为的值。出于某种原因,您正在用数字 0、1、2、3 等替换从用户那里读取的内容。还有很多其他奇怪的东西,但这是造成问题的主要原因。
标签: arrays c numbers element min