【发布时间】:2019-06-08 08:46:00
【问题描述】:
这段代码应该在给定数组中找到最小的奇数并将其存储在min,但是当我尝试打印min时,它总是打印0。
int smallestodd(int x[5]){
int j;
int k[5];
int p = 0;
int r = 0;
for(int h =0; h<5;h++){
j = x[h] % 2;
if(j == 1){
int temp =x[h];
k[p] =temp;
p++;
}
}
int min = k[0];
while(k[r] !=0){
if(k[r] < min ){
min = k[r];
r++;
}
}
return min;
}
【问题讨论】:
-
当您在
if(k[r] < min )中更新r并且min被初始化为k[0]时,您有无限循环。 -
这似乎是learn how to debug your programs 的好时机。
-
这不会打印任何东西。
-
为什么要保留 k[] 将 min 初始化为 x 中的第一个元素(或某个较大的值)就足够了,然后查看其余部分,如果较小且奇数,则分配给 min
-
还要注意局部变量(包括数组)不会自动初始化。未初始化的变量将具有 indeterminate(并且看似随机)的值。这意味着循环条件
k[r] !=0是错误的(因为数组中可能没有任何元素等于零)。您在变量p中拥有k中有效元素的数量。使用它。
标签: c arrays function for-loop