for 循环中的 Else 语句将不起作用

Else statement inside for loop won't work

编辑:问题已解决,谢谢大家。我知道问题没有得到很好的解释,很抱歉。

#include <stdio.h>


int main()

{
    int line=0;
    int longest=0;
    int v1[3][3]={{1,0,0},{1,1,1},{7,8,9}};
    for(int i=0 ; i<3;i++){
        for(int j=0; j<2 ;j++ ){
            if(v1[i][j]==0){
                
                int temp=1;
                for(int k=j+1; k< 3; k++){
                    printf("%d\n",k);
                    if( v1[i][k]==0 ){
                        temp++;
                    }
                    if( v1[i][k]=!0 ){
                        if( temp>longest ){
                            longest=temp;
                            line=i+1;
                        }
                    }
                }
            }
        }
    }
    printf("line:%d\nlenght:%d",line,longest);
}

我有这样的代码。当我尝试将 else 语句与 if 语句一起使用时,如果不满足 if 语句中的要求,else 语句将不起作用。

                    if( v1[i][k]==0 ){
                        temp++;
                    }
                    else{
                        if( temp>longest ){
                            longest=temp;
                            line=i+1;
                        }

但是当我使用另一个 if 语句时它会 运行 当满足 v1[i][k]!=0 条件时。

                    if( v1[i][k]==0 ){
                        temp++;
                    }
                    if( v1[i][k]!=0 ){
                        if( temp>longest ){
                            longest=temp;
                            line=i+1;
                        }

替换=!与!= 偶尔的错误很难发现。 在 C 中,'!=' 表示“不等于”。 而 '=!'是赋值与逻辑否定的组合。 'x=!0' 等同于 'x=1'

在此声明中

if( v1[i][k]=!0 ){

有错字。应该有

if( v1[i][k] != 0 ){

但无论如何第一个和第二个程序都有逻辑错误。这个 if 语句

if( temp>longest )

必须放在内部 for 循环之外。

for(int k=j+1; k< 3; k++){

而且这个循环中的条件

for(int j=0; j<2 ;j++ ){

应为 j < 3 而不是 j < 2。否则当一行只包含最后一个元素等于零的情况将被忽略。

这是一个演示程序,展示了如何编写 for 循环。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) 
{
    enum { N = 10 };
    int a[N][N];

    srand( ( unsigned int )time( NULL ) );
    
    for ( int i = 0; i < N; i++ )
    {
        for ( int j = 0; j < N; j++ )
        {
            a[i][j] = rand() % 2;
        }
    }
    
    for ( int i = 0; i < N; i++ )
    {
        for ( int j = 0; j < N; j++ )
        {
            printf( "%d ", a[i][j] );
        }
        putchar( '\n' );
    }
    
    putchar( '\n' );
    
    int line = 0;
    int longest = 0;

    for ( int i = 0; i < N; i++ )
    {
        for ( int j = 0, k = 1; j < N - longest; j += k, k = 1 )
        {
            if ( a[i][j] == 0 )
            {
                while ( j + k < N && a[i][j + k] == 0 ) ++k;
                
                if ( longest < k )
                {
                    longest = k;
                    line = i + 1;
                }
            }
        }           
    }
    
    if ( line != 0 )
    {
        printf( "line: %d, length: %d\n", line, longest );
    }
    else
    {
        puts( "There is no row with elements equal to 0" );
    }
    
    return 0;
}

程序输出可能看起来像

0 0 0 1 1 0 0 1 0 0 
1 1 0 1 0 1 1 0 1 1 
1 1 0 1 1 0 0 0 1 1 
1 1 0 1 0 1 0 0 0 0 
1 1 0 1 0 0 0 0 1 1 
1 0 0 1 1 1 0 1 1 1 
1 0 0 1 0 0 0 0 0 0 
0 1 1 0 0 0 1 1 0 0 
0 1 0 1 1 0 0 1 1 0 
0 0 0 0 1 0 0 1 0 0 

line: 7, length: 6