【问题标题】:Why is this program going this way? C为什么这个程序会这样? C
【发布时间】:2015-05-12 15:09:11
【问题描述】:

你好 stackOverflowers!有人可以解释为什么当我将数组从 1 充电到 10 时,输出显示最小值为 1,最大值为 10,而当我从 10 到 1 开始数组时,输出最小值为 2,最大值为 10 .我认为嵌套的if序列是正确的,因为计数器显示正确的偶数和正确的奇数,但我想我错过了一些东西...... 程序应该输出数组内的最小和最大偶数。

感谢您的回答!

/*EVEN MAX AND MIN POINTER FUNCTION*/

#include <stdio.h>

#define MAXARRAY 100

typedef int ArrayTable[MAXARRAY];

void chargeArray(ArrayTable,int);
void maxMinEven(const ArrayTable, int, int *, int *,int *,int *);

int main(){
    ArrayTable intTable;
    int maxim,minim;
    int contEven=0,contOdd=0;
    int n=10;

    printf("Input %d integer number:\n",n);
    chargeArray(intTable,n);
    maxMinEven(intTable,n,&minim,&maxim,&contEven,&contOdd);
    printf("The minimun even of the %d number is %d and the maximun %d. Even     %d Odd %d\n",n,minim,maxim,contEven,contOdd);
    system("pause");
    return 0;
}
void chargeArray(ArrayTable t,int n){
    int i=0;
    int number;
    for(i=0;i<n;i++){       
        scanf("%d",&number);
        t[i]=number;
    }
}

void maxMinEven(const ArrayTable t, int n, int *min, int *max,int      *contEven,int *contOdd){
    int i;
    *min=t[0];
    *max=t[0];

    for(i=0;i<n;i++){       
        if(t[i]%2==0){  
            (*contEven)++;/*incremento el contenido de la direccion de    memoria de contPar*/

            if(t[i]>*max)
                *max=t[i];  

            if(t[i]<*min)       
                *min=t[i];      

}else{
            (*contOdd)++;/*incremento el contenido de la direccion de memoria de   contImp*/
        }

    }
}

【问题讨论】:

  • 是时候学习如何调试了。
  • 请更明确一点,这对我来说不是那么明显。错误在哪里?
  • 欢迎来到 StackOverflow!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 您的标题不能反映您的要求,请选择一个更好的标题。
  • 好的,我下次就这样。再次感谢!

标签: c arrays pointers


【解决方案1】:

您将最小值设置为等于数组的第一个元素,无论它是否偶数。

*min=t[0];

在循环中,您将值与此最小值进行比较。 您会得到这个结果,因为 1 小于数组中的任何其他偶数。

希望我能帮上忙,

【讨论】:

  • 是的,你帮了忙,但是在这种情况下如何初始化?
  • 如果您有有效和无效的值(例如,只有正数),您可以使用范围之外的值(或 Bill Tynch 提到的 INT_MIN INT_Max)。如果没有,请使用标志。无论哪种方式,如果没有数字是偶数,您应该考虑返回值是多少。
  • 好的,我不知道。我已经这样做了,效果很好。
【解决方案2】:

在这两行:

*min=t[0];
*max=t[0];

您的代码假定t[0] 是偶数。但是,这不一定是真的。

一个解决方法是:

*min = INT_MIN;
*max = INT_MAX;

【讨论】:

  • 好的,我如何以及在哪里初始化 INT_MIN 和 INT_MAX?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多