断点&输出大法快速定位编程错误
1、断点法
点红框位置就可以加每行代码的断点
再按F5进行debug操作,在下面的窗口看各函数的值
这种方法经常用在循环出现问题时进行处理
举个栗子
比方说现在输出的结果非常烫,但是由于代码复杂程度较高,不好分析
#include<iostream>
using namespace std;
class mystring
{private:char str[555];
public:mystring();mystring(const char s[]);mystring operator+(mystring m);void dayin();};
mystring::mystring(){str[0] = 0;}
mystring::mystring(const char s[])
{int i = 0;for (i = 0; s[i] != 0; i++)str[i] = s[i];str[i] = 0;}
mystring mystring::operator+(mystring m)
{mystring y;int i = 0;int n = 0;for (i = 0; str[i] != 0; i++)y.str[i] = str[i];for (n = 0; m.str[n] != 0; n++)y.str[i + n] = m.str[n];return y;}
void mystring::dayin(){cout<<str;}
int main()
{mystring s1("Hello");mystring s2("World");mystring s3;s3 = s1 + s2;s3.dayin();system("pause");return 0;
}
对重载部分进行分析:
因为有两个循环,所以我们需要分开判断是前面还是后面出了问题
用断点法给第一个for里面的语句上断点
点击运行,程序运行后自动停在这一行,此时下面的自动窗口会显示各个变量的值,我们可以用这个进行分析
此时按继续就可以一步一步地执行(可以用来判断是否是循环中间哪一步错了)
走到下一步就开始烫了
因此第一个循环就出现了问题
结合值可以分析是因为输出时直接使用cout<<str;
导致的
因此对输出函数进行修改
特别提醒:如果大家出现了烫烫烫,别慌张,一般都是输出部分错了,平常我们用str[i]!=0,但由于str空位置指向-52的ascii码,所以这里可以用str[i]>0,相信聪明的大家都知道这是正确的hhh
改成这样即可
for(int i=0;str[i]>0;i++)cout << str[i];
去掉断点再输出,成功
2、输出法
跟上面断点差不多,只是这样更省时间,容易看出程序运行时变量的变化过程
很好理解,就是直接在循环中多加一句cout,把变量的值写出来
举个栗子
对于这种要输出很多数字的题目,经常会碰到输出不正确的情况,比如这种
(我不干活了)!
(输出的少了)
遇到这些情况我们可以用cout快速筛出错误数据进行处理
(第一种可能是变量不符合输出if语句要求,第二种就是变量计算问题)
比如这个代码(正确的,主要是我不知道错误怎么编了QAQ):
#include<bits/stdc++.h>
using namespace std;
int main()
{string s;int cishu;cin>>s;for(int i=0;i<=9;i++){cishu=0;for(int j=0;j<=s.length()-1;j++){if(s[j]==i+48)cishu++;}if(cishu!=0){cout<<i<<":"<<cishu<<endl;}}
}
判断是否正确可以在内层for中加上一个cout语句
for(int j=0;j<=s.length()-1;j++){if(s[j]==i+48)cishu++;cout<<i<<":"<<cishu<<endl;}
运行的时候每一次计算结果都会输出
这样能够快速排除变量问题
本文由mdnice多平台发布