【发布时间】:2014-09-25 14:01:05
【问题描述】:
我有以下代码,我在其中运行嵌套 for 循环,并在循环内检查语句是否为真。如果是这样,则加载内核并使用内核执行卷积。主要是输入图像。
当我运行代码时,它变成了一个无限循环。我不明白为什么。
for(m=0;m<h;m++)
{
for(k=0;k<v;k++)
{
if( (m = 261) && (k=361))
{
printf("%f", Thickness[m][k]);
printf("%d,%d",m,k);
sprintf(fn,"F:\\newresult\\fft\\neww8_25.raw");
if ((f2=fopen( fn, "rb" )) == NULL)
{
printf("Pb lecture fichier %s\n", fn);
exit(1);
}
for(int a = 0; a < krow; ++a)
for(int b = 0; b < kcol; ++b)
fread(&Kernel[a][b], sizeof(float), 1, f2);
fclose(f2);
for(int a = 0; a < krow; ++a)
for(int b = 0; b < kcol; ++b)
sum+=Kernel[a][b];
for(int a = 0; a < krow; ++a)
for(int b = 0; b < kcol; ++b)
Kernel[a][b] /= sum;
//convolute
s1 = convolve2D(primary, s1, m, k, Kernel, krow , kcol);
}
}
}
【问题讨论】:
-
如果您启用编译器警告,编译器将帮助指出简单的错误,例如
if( (m = 261) && (k=361))。 -
我认为 if( (m = 261) && (k=361)) 这应该是 if( (m == 261) && (k==361))
-
声明
if ((m = 261) && (k=361))将始终为真,并将m和k设置为这些值。我们不知道h和v是什么,但它们小于 261 和 361。您需要比较相等性,==,而不是赋值,=,在这里。 -
非常感谢。如果我必须大于或小于?
-
有趣的是,在
if ((f2=fopen( fn, "rb" ))==NULL)行中,您已经正确使用了这两个不同的运算符。
标签: c if-statement for-loop