所以我在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;
}
答案 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 < 5
到main
以及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