len*_*any 1 c arrays algorithm loops
我是C新编码的新手.我正在尝试编写一个代码,用于查找数组中的峰值数,即大于该数字前后数字的数字.
这是我的代码.它运行没有错误但没有输出所以我知道我做错了什么.
#include <stdio.h>
int main() {
int nums[14] = {1, 2, 3, 3, 2, 4, 1, 5, 6, 3, 1, 10, 2, 8};
int peaks[4];
for(int i = 0; i < nums[i]; i++){
if(nums[i] > nums[i-1] && nums[i] > nums[i+1]){
peaks == nums[i];
}
return peaks;
}
printf("Peak numbers are %d",peaks);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能输出它作为结果: [4, 6, 10, 8]
启用编译器的warnigs!你应该得到这样的东西:
prog.c: In function 'main':
prog.c:8:16: warning: comparison between pointer and integer
peaks == nums[i];
^~
prog.c:8:16: warning: statement with no effect [-Wunused-value]
peaks == nums[i];
~~~~~~^~~~~~~~~~
prog.c:10:13: warning: returning 'int *' from a function with return type 'int' makes integer from pointer without a cast [-Wint-conversion]
return peaks;
^~~~~
prog.c:10:13: warning: function returns address of local variable [-Wreturn-local-addr]
prog.c:13:28: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
printf("Peak numbers are %d",peaks);
~^ ~~~~~
%ls
Run Code Online (Sandbox Code Playgroud)
所以,改变这个:
peaks == nums[i];
Run Code Online (Sandbox Code Playgroud)
对此:
peaks[j] = nums[i];
Run Code Online (Sandbox Code Playgroud)
j你可以使用的另一个柜台在哪里.
那你return peaks呢,为什么?它不是自定义功能,所以你不应该返回.
此外,您尝试打印如下数组:
printf("Peak numbers are %d",peaks);
Run Code Online (Sandbox Code Playgroud)
这是不可能的,你需要遍历数组的元素,如下所示:
for(i = 0; i < 4; ++i)
printf("%d\n", peaks[i]);
Run Code Online (Sandbox Code Playgroud)
在纠正警告之后,您已准备好实际处理yuor逻辑.你的for循环不会迭代所有数组的数组.所以改变这个:
for(i = 0; i < nums[i]; i++)
Run Code Online (Sandbox Code Playgroud)
对此:
for(i = 0; i < 14; i++)
Run Code Online (Sandbox Code Playgroud)
此外,您的if语句将导致未定义的行为:
if(nums[i] > nums[i-1] && nums[i] > nums[i+1])
Run Code Online (Sandbox Code Playgroud)
when i是0,when i是13.