我有一个组成的阵列,我需要将其四舍五入并转换为整数,以便我可以将它们用作输出数组中的索引。我刚刚开始启动C
编程,不确定这是如何工作的。到目前为止,我能想到的最好的是:
int create_hist( double input_array[], int count, int output_array[17] ) {
for ( int i = 0; i < count; i++ ) {
input_array[i] = int floor(input_array[i]);
output_array[input_array[i]]++;
但是,我遇到了以下错误,我遇到了麻烦:
array.c:11:20: error: expected expression before ‘int’
input_array[i] = int floor(input_array[i]);
^
array.c:12:7: error: array subscript is not an integer
hist[input_array[i]]++;
^
array.c:14:1: error: control reaches end of non-void function [-Werror=return-type]
}
^
如果有人可以让我知道我出了什么问题,将不胜感激。
,除非您实际想修改input_array
,否则最好将圆形的双重折断在中间变量中保存,以访问整数阵列。而且无需使用floor()
将double
铸造为int
。
int create_hist(double input_array[], int count, int output_array[17]) {
for (int i = 0; i < count; i++) {
int index = (int)input_array[i];
if ((index > 16) || (index < 0)) {
return -1;
}
output_array[index]++;
}
return 0;
}
当然,您也应该真正以output_array
的大小作为变量,而不是对其进行硬编码。
,让我们开裂:
第一个错误是由于您正在声明函数的事实。
input_array[i] = int floor(input_array[i]);
请注意,在地板前的int
,这不是必需的。应该是
input_array[i] = floor(input_array[i]);
第二个错误是由于您使用
中的double
访问数组元素。 output_array[input_array[i]]++;
您要么应该以其他方式进行操作,要么做以下操作:
output_array[(int) input_array[i]]++;
,第三个错误是不平衡的括号。