if语句in for循环-infinite循环

时间:2014-09-25 14:01:06

标签: c if-statement for-loop

我有以下代码,其中我运行嵌套for循环并在循环内检查是否该规则是真的。如果是,则加载内核并使用内核执行卷积。 Primary是输入图像。

当我运行代码时,它变成了一个无限循环。我不明白为什么。

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);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

if ((m = 261) && (k=361))这是一项任务 如果你想比较一下:

  • 表示平等,请使用==
  • for less / greater:< / >
  • 表示不平等:!=

if(f2 == nullptr)
if(!f2)

两种情况都是平等的。如果f2 为null,那么......

if(f2 != nullptr)
if(f2)

如果f2 不是 null,那么......


注意: nullptr 是c ++ 11的一项功能。如果您不使用c ++ 11,请使用 NULL insead。

编辑:@unwind评论时,有两项作业 由于261始终为非零,因此第一个条件始终为真。它将继续评估右侧并将361分配给k

答案 1 :(得分:1)

您在此处为m分配值:if( (m = 261) && (k=361))始终为真(因为它为非零值)。 它应该是  if( (m == 261) && (k==361))