任务说明:
,荷兰人用水坝征服了来自海洋的领土,不喜欢被这些水坝跨过波浪。一座旧水坝的修缮计划如下。A是在大坝前面的一个点测量波浪的高度,然后取波浪撞击的波浪(即高于当前大坝的波浪),这些波的平均高度将是新的坝高。例如,如果你有一个20米的大坝,在它前面测量到12,32,16,40,21米高的波浪,那么第2,4,5引脚,它们的值是32,40,21,平均值是(32 + 40 + 21) /3= 31,即新大坝必须是31米。编写一个计算新大坝高度的函数。第一个输入参数是一个完整的常设数组,其终止元素为0。这包含了波浪的高度。另一个输入参数是当前大坝高度,它是一个整数。函数是波的平均值的整数部分,高于屏障返回的值。如果没有波浪通过,该函数将返回原始大坝的高度。int平均(int输入[],int高度);
我的代码是:
int average(int input[], int height){
int counter = 0;
int added = 0;
int average;
for(int i = 0; input[i] != '0'; i++)
if(input[i]>height) {
added += input[i];
counter++;
}
average = added/counter;
return average;
}问题是,当我运行代码时,我收到了以下错误消息:
进程完成出口代码-1073741819 (0xC0000005)
我已经调查了这个未经授权的内存使用情况,但我不知道是什么原因造成了这种情况。
多亏了你们,我得到了答案
if (counter != 0) {
average = added / counter;
return average;
} else {
return height;
}就是这样,我的问题是除以0。
发布于 2022-03-13 22:04:16
该数组具有所谓的哨兵值。(标志着结束的)特殊价值.它是一个0的值。但是你没有正确地测试它。
for(int i = 0; input[i] != '0'; i++)你的意思是
for(int i = 0; input[i] != 0; i++)为什么?
在C '0‘中是一个字符。字符将被视为整数在几乎所有放置在一个整数是预期的地方。但它是对字符的ASCII值的直接翻译。见这里https://www.asciitable.com/
您可以看到,字符“0”实际上是小数48,十六进制0x32,而不是0。
https://stackoverflow.com/questions/71461016
复制相似问题