C:为什么计数器在for循环中没有重置为0

时间:2016-08-26 11:12:19

标签: c for-loop counter

所以我在for loop内创建了一个简单的for loop。变量frequecyCount未重置为0,不明白原因。

我已经进入了数组x和hist数组,需要一个计数器变量来计算x中相同值的频率和hist的位置。

#include <stdio.h>

 void  create_hist(double *x, int count, int *hist) {
    int frequencyCount = 0;
    for (int iHist = 0; iHist <= 5; iHist++) {
        //initalize to zero
        hist[iHist] = 0;

        for (int ix = 0; ix < count; ix++) {
            // convert to int
            x[ix] = (int)x[ix];

            if (x[ix] == hist[iHist]) {
                frequencyCount++;
            }
        }
        // add to the hist[] array the frequency count at position i
        hist[iHist] = frequencyCount;
        frequencyCount = 0;
    }

    int main( void ) {
    double x[5] = {0, 0, 0, 0, 3};
    int hist[5];
    int count = 5; 

    create_hist(x, count, hist);

    printf( "\tInput data:\n" );
    for ( int i = 0; i < count; i++ ) {
        printf( "\t%d\t%f\n", i, x[i] );
    }

    printf( "\tHistogram:\n" );
    for ( int i = 0; i <= 5; i++ ) {
        printf( "\t%d\t%d\n", i, hist[i] );
    }

    return 0;

}

2 个答案:

答案 0 :(得分:2)

尝试此更改:

for (int iHist = 0; iHist < 5; iHist++) {  // <= changed to <
    int frequencyCount = 0;                // Moved this line to be inside the loop

答案 1 :(得分:2)

frequencyCount变量正在重置。还有另一个原因,你的输出不是你所期望的。

这个if声明很可能是错误的:

    if (x[ix] == hist[iHist]) {
        frequencyCount++;
    }

在此阶段,hist[iHist]始终为0(这是您在循环之前指定的值)。

我认为你的意思是:

    if (x[ix] == iHist) {
        frequencyCount++;
    }

您还需要将i <= 5中的i < 5main以及iHist <= 5中的iHist < 5更改为create_hist的循环范围条件更改为避免缓冲区溢出。

进行这些更改会产生输出:

    Input data:
    0       0.000000
    1       0.000000
    2       0.000000
    3       0.000000
    4       3.000000
    Histogram:
    0       4
    1       0
    2       0
    3       1
    4       0