没有在我的函数数组中获得正确的计数器

时间:2014-04-03 05:32:22

标签: c arrays function

函数hot_days(),它有两个参数:当前月份的温度数和存储温度的数组。搜索临时数组并计算中午温度超过32的所有日期。返回此计数。

在代码末尾检查我的hot_days函数。 icounter没有工作,我认为问题出在x< 32。

#include <stdio.h>
    #include <conio.h>
    #define HIGH 32

    //function prototypes
    void read_temps(int []);

    void hot_days(int [], int []);

    int main()
    {


        //Array
        int TempsAry[31];
        int hotAry[31];

        //sending array 
        read_temps(TempsAry);

        //sending hot array
        hot_days(TempsAry, hotAry);






    getch();
    return 0;
        }

void read_temps(int TempsAry [])
{

      // variables
        int tempnum ;
        int x = 0 ;
        int icount = 0;


        while (x < 31)

    {
        // entering temperature

        printf("Please enter today's temperature:\n ");
        scanf("%d",&tempnum);

        if (tempnum <= -500)
        {
           break;         
        } 

         TempsAry[x] = tempnum;                   
         ++x;
         icount = icount +1;
      }

        //outputting array      
        for (x = 0 ; x<icount; ++x) 
        {
        printf("%d\n",TempsAry[x]);
        }
}

 void hot_days(int TempsAry [], int hotAry [])
 {
    int x = 0 ;
    int icount = 0;

    while (x<31)
    {
          if (TempsAry[x] > HIGH)
          {
            hotAry[x] = TempsAry[x];
            ++icount;              
          }

          ++x;   
    }

    printf("%d\n", icount);  









 }

4 个答案:

答案 0 :(得分:0)

您在TempsAry中有未初始化的值。你得到了不明确的行为。

更改行

int TempsAry[31];

int TempsAry[31] = {0};

相当于用TempsAry初始化,并以31个逗号分隔的零。有关详细信息,请访问How to initialize an array in C

答案 1 :(得分:0)

此代码没有任何问题,它正常工作。查看ideone上的代码段。

答案 2 :(得分:0)

while (x < 31)

    {
        // entering temperature

        printf("Please enter today's temperature:\n ");
        scanf("%d",&tempnum);

        if (tempnum <= -500)
        {
           break;         
        } 

如果输入温度&lt; = - 500,则循环中断。因此,如果您输入满足此条件的值作为第i个温度,那么数组temp_array[]将在temp_array[i]之后具有垃圾值,因为它们不会被赋值。这可能会导致您的程序随机icount 因此,将那些剩余的temp_array []值设为0。

答案 3 :(得分:0)

您的代码有视线问题,如果您输入的数字小于31,因为为数组TempsAry []分配的内存包含原始值.So in function

void hot_days(int TempsAry [],int hotAry [])

while循环

while (x<31)
{
      if (TempsAry[x] > HIGH)
      {
        hotAry[x] = TempsAry[x];
        ++icount;              
      }

      ++x;   
}

即使元素数小于31,也要比较多达31个元素,因此这也包括未初始化内存中的垃圾值,因此获得的结果将是错误的

可以通过在main()函数中将 TempsAry 分配的内存初始化为0来消除

int TempsAry[31];
int hotAry[31];
memset(TempsAry,0x00,sizeof(TempsAry));