C for循环中的If语句-无限循环

C for循环中的If语句-无限循环,c,if-statement,for-loop,C,If Statement,For Loop,在下面的代码中,我运行一个嵌套的for循环,并在循环中检查statment是否为true。如果是这样,则加载内核并使用该内核执行卷积。主要是输入图像 当我运行代码时,它变成了一个无限循环。我不明白为什么 for(m=0;m<h;m++) { for(k=0;k<v;k++) { if( (m = 261) && (k=361)) { printf("%f", Thickness[

在下面的代码中,我运行一个嵌套的for循环,并在循环中检查statment是否为true。如果是这样,则加载内核并使用该内核执行卷积。主要是输入图像

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

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);
        }
    }
}
for(m=0;m
if((m=261)和&(k=361))
这是一项作业。
如果你想比较一些东西:

  • 要实现相等,请使用
    ==
  • 对于较小/较大:
  • 对于不相等:
    !=

这两种情况是相等的。如果f2为空,则

if(f2 != nullptr)
if(f2)
如果f2不为空,则


注意:nullptr是c++11的特性。如果不使用c++11,请使用NULL insead

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

if((m=261)和&(k=361))
这是一个分配。
如果你想比较一些东西:

  • 要实现相等,请使用
    ==
  • 对于较小/较大:
  • 对于不相等:
    !=

这两种情况是相等的。如果f2为空,则

if(f2 != nullptr)
if(f2)
如果f2不为空,则


注意:nullptr是c++11的特性。如果不使用c++11,请使用NULL insead

编辑:正如@unwind所评论的,有两个作业。

由于
261
始终为非零,因此第一个条件始终为真。它将继续计算右侧并将
361
赋值给
k

您在此处将值赋值给
m
如果((m=261)和(&&&(k=361))
这始终为真(因为它是非零值)。 应该是
if((m==261)和&(k==361))
您在这里为
m
赋值:
if((m=261)和&(k=361))
,这始终是真的(因为它是非零值)。 应该是
if((m==261)和&(k==361))

如果启用编译器警告,编译器将有助于指出一些简单错误,例如
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)
行中,您已经正确使用了这两个不同的运算符。如果启用编译器警告,编译器将有助于指出一些简单的错误,例如
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)
中,您已经正确地使用了这两个不同的运算符。实际上这是两个赋值,因为
261
始终为非零
&
将继续并计算右侧,也将赋值给
k
。),由于
261
始终为非零,
&&
将继续计算右侧,并分配给
k
。)