函数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);
}
答案 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));