如何解决流动代码中的逻辑错误?

Shu*_*dol -2 c++

如果条件块内部没有打印任何值。逻辑错误在哪里?谢谢。

#include<bits/stdc++.h>
using namespace std;

int fx[]= {-1,-1,-1,0,1,1,1,0};
int fy[]= {-1,0,1,1,1,0,-1,-1};

int ar[20][20];
int n;
int v1, v2;

void fun(int a, int b)
{
    for(int i=0; i<8; i++)
    {
        v1 = a+fx[i];
        v2 = b+fy[i];
        //cout<<v1<<" "<<v2<<endl;
        if(v1>=0 && v1<n)
        {
            if(v2>=0 && v2<n)
            {
               // Not executing 
               cout<<"----------"<<endl;
               cout<<v1<<" "<<v2<<endl;
            }
        }

    }
}

int main()
{
    int n;
    cin>> n;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
            cin>> ar[i][j];
    }
    fun(0,1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

样本输入:
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
预期输出:

---------

0 2
1 2
1 1
1 0
0 0

Jar*_*d42 6

您有 2 个变量n,一个是全局变量(带值0),一个是main通过输入提供的。

fun 使用全局的。

避免(非常量)全局变量。更喜欢传递nfun

void fun(int (&arr)[20][20], int n, int x, int y)
{
    const int fx[]= {-1,-1,-1,0,1,1,1,0};
    const int fy[]= {-1,0,1,1,1,0,-1,-1};

    for(int i=0; i<8; i++)
    {
        int v1 = x + fx[i];
        int v2 = y + fy[i];
        if(v1>=0 && v1<n && v2>=0 && v2<n)
        {
               std::cout << "----------" << std::endl;
               std::cout << v1 << " " << v2 << std::endl;
        }
    }
}

int main()
{
    int n;
    std::cin >> n;

    int arr[20][20];

    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            std::cin >> arr[i][j];
        }
    }
    fun(arr, n, 0, 1);
}
Run Code Online (Sandbox Code Playgroud)

演示