此 C 程序中的意外 return 值

Unexpected return value in this C program

我写了一个 C 程序来查找数组中最大偶数和最小偶数的索引差异(这里 0 被认为是偶数,从测试用例来看它肯定不像数组应该排序)。如果数组只有一个元素或该数组中没有偶数,它将 return 一个值或否。

#include <math.h>
#include <stdio.h>



int main() {
  
    int n,small,big,a[50],b1,s1,diff;
    scanf("%d",&n);
    for(int i =0;i<n;i++){
        scanf("%d",&a[i]);
    }
    


    
    small = a[0];
    big = a[0];
    
    for (int i = 1; i < n; i++)
    {
        if (a[i] < small && a[i]%2 == 0)
        {
            small = a[i];
            s1 = i;
        }
        if (a[i] > big && a[i]%2 == 0)
        {
            big = a[i];
            b1 = i;
        }
    }
    diff = b1-s1;
    
    if(diff==0){
      printf("NO");
    }
    else{
      printf("%d",diff);
    }
    
    return 0;
}

当我输入时

4
120 0 4 7

它没有 return 1 。它 returns 32657。 我在这里不理解什么逻辑?请帮助我。

在此代码段中

small = a[0];
big = a[0];

你还需要初始化s1b1

s1 = 0;
b1 = 0;

总的来说,您的方法是不正确的,因为 a[0] 可以是奇数,也可以是数组中最大或最小的数。

所以首先你需要在数组中找到第一个偶数,如果这样的数字存在(例如在索引 i 处)然后写

small = a[i];
big = a[i];
s1 = i;
b1 = i;

注意您实际上可以在程序的任何地方包含 header <stdio.h> 因为在第一次包含 header 之后所有其他 header s 实际上不会被包括在内。但是不要那样做,因为它会让你的程序很奇怪。:)

所以在 main

中删除这个指令
#include <stdio.h>

还有指令

#include <math.h>

是多余的,因为您的程序中没有使用 header 中的任何声明。您也可以删除它。