繁体   English   中英

for循环中的if语句-无限循环

[英]If statement in for loop -infinite loop

我有以下代码,我在其中运行一个嵌套的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(f2 == nullptr)
if(!f2)

两种情况都相等。 如果f2 null,则...

if(f2 != nullptr)
if(f2)

如果f2 不为 null,则...


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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM