蛇形填数--超级大模拟--vs2022的调试技巧

目录

1、开始调试和结束调试

2、观察程序运行时变量和参数的值

2.1、自动窗口:

2.2、监视

3、相关问题

据我所经历的比赛中,只要涉及到模拟算法,一般都有蛇形填数这一项。

所谓蛇形填数,就是在矩阵中按顺时针从大到小一次填数!请看:

题目链接:

59. 螺旋矩阵 II - 力扣(LeetCode) (leetcode-cn.com)icon-default.png?t=M3K6https://leetcode-cn.com/problems/spiral-matrix-ii/蛇形填数--超级大模拟--vs2022的调试技巧_第1张图片

 这题不光要细心,还要你的代码经验足够丰富。最最重要的,调试不可缺少!

正片开始

1、开始调试和结束调试

在Visual Studio 2022中,程序编写完成之后,按 F5 键 可以运行代码。

按 F10 键 是开始调试,不同于dev c++,vs不需要打断点。在 F10 之后,F11 就是逐语句调试,也就是一句一句的执行!

蛇形填数--超级大模拟--vs2022的调试技巧_第2张图片

调试完成会自动退出调试,但有时我们也需要自行退出调试

蛇形填数--超级大模拟--vs2022的调试技巧_第3张图片

 点击这个小红色方块,就退出调试了。

2、观察程序运行时变量和参数的值

 在调试的过程中,我们需要观察变量值的变化,以确定程序的错误之处。

vs提供了两种办法:

2.1、自动窗口:

蛇形填数--超级大模拟--vs2022的调试技巧_第4张图片

注意:vs默认调试打开自动窗口,但想要设置,必须先按 F10 开始调试,否则你看到的设置界面是这样的:

蛇形填数--超级大模拟--vs2022的调试技巧_第5张图片

 自动窗口的特点是 他可以根据你的程序变换来调整变量,即出现在右边状态栏里面的只有当前函数中已经出现的变量:

蛇形填数--超级大模拟--vs2022的调试技巧_第6张图片

如图所示:此时程序执行到第2232行, 右边状态栏里面只显示了 变量n 此时的状态,下面的ans, i,  j均没有显示,因为程序还没执行到那里。

2.2、监视

跟自动窗口不同的是:只要你设置了对变量的监视,监视可以随时观察监视变量的状态。

蛇形填数--超级大模拟--vs2022的调试技巧_第7张图片

四个监视窗口任选一个即可。

设置了监视之后,如图

蛇形填数--超级大模拟--vs2022的调试技巧_第8张图片

 

此时程序进入到了 generateMatrix 函数。可见,即使函数还没出现i,j 右边状态栏依旧存在相应的变量。

3、相关问题

有时候我们会遇到按 F10 之后会出现跟 F5 一样的效果,即直接弹出黑框让我们输入或者直接输出。

这可能是因为没有删除输出框的原因

即; 在调试之前,黑框已经存在, 此时按 F10 会直接执行代码而进入调试;

通用的解决方案:

调试除了问题,首先关闭调试,检查黑框是否存在,存在就先删除,然后重新启动调试

(没有什么是重启解决不了的,如果有,就再重启一次)。 

好了,大家看看蛇形填数的代码吧~~~

//蛇形填数
vector> generateMatrix(int n) {
    vector>ans;
    int arr[20][20] = { 0 };
    int i = 1;
    int s = 0;
    int r = -1;
    while (i <= n * n)
    {
        //右
        r++;
        while (r < n - s && i <= n * n)
        {
            arr[s][r] = i++;
            r++;
        }
        //下
        int k = s + 1;
        r -= 1;
        while (k < n - s && i <= n * n)
        {
            arr[k][r] = i++;
            k++;
        }
        //左
        k -= 1;
        r--;
        while (r >= s && i <= n * n)
        {
            arr[k][r] = i++;
            r--;
        }
        //上
        r += 1;
        k--;
        while (k >= 1 + s && i <= n * n)
        {
            arr[k][r] = i++;
            k--;
        }
        s++;
    }
    for (int i = 0; i < n; i++)
    {
        vectorret;
        for (int j = 0; j < n; j++)
        {
            ret.push_back(arr[i][j]);
        }
        ans.push_back(ret);
    }
    return ans;
}

int main()
{
    int n = 0;
    cin >> n;
    vector>ans = generateMatrix(n);
    for (int i = 0; i < ans.size(); i++)
    {
        for (int j = 0; j < ans[i].size(); j++)
        {
            cout << ans[i][j] << "     ";
        }
        cout << endl;
    }
    return 0;
}

 记得点赞哟~~~~~~~

你可能感兴趣的:(每日一题,算法,调试)