如何在C中将double数组转换为整数数组?

时间:2018-04-01 03:44:34

标签: c arrays for-loop

我有一个组成双精度数组,我需要向下舍入并转换为整数,所以我可以将它们用作输出数组中的索引。我刚刚开始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]
 }
 ^

如果有人能让我知道我哪里出错了,我们将不胜感激。

2 个答案:

答案 0 :(得分:5)

除非您确实想要修改input_array,否则最好在中间变量中保存舍入的double,然后访问整数数组。并且无需使用floor()强制转换doubleint即可。

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的大小作为变量传递,而不是硬编码。

答案 1 :(得分:3)

所以让我们破解:

第一个错误是由于您要声明一个函数。

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]]++;

并且第三个错误是不平衡的括号。