debug详解,debug经验

  debug详解,debug经验

  Yyds干货库存

  又是一天在洛古刷题。因为我是从入门级开始的,所以提问开始很简单。我就知道会刷回来,遇到了一个代码量比较大的问题。一般长代码调试代码会比较麻烦。我不知道从哪里开始。今天给大家分享一个调试技巧3354“注释输出”调试方法。

  事不宜迟,我们先看标题和代码:

  科目

  密码

  #包含位/标准数据。h

  使用命名空间std

  int n;

  char a[10][10],b[10][10];

  int g(char **x)

  {

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  if(x[i][j]!=b[i][j])返回0;

  }

  }

  返回1;

  }

  char** f1(char x[10][10])//90deg

  {

  char * * p=new char *[n];

  for(int I=0;我我)

  {

  p[I]=新字符[n];

  for(int j=0;j j)

  {

  p[I][j]=x[I][j];

  }

  }

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  p[j][n-1-I]=x[I][j];

  }

  }

  返回p;

  }

  char * * F2(char * * x)//180度

  {

  char * * y=new char *[n];

  for(int I=0;我我)

  {

  y[I]=新字符[n];

  for(int j=0;j j)

  {

  y[I][j]=x[I][j];

  }

  }

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  y[j][n-1-I]=x[I][j];

  }

  }

  返回y;

  }

  char * * F3(char * * x)//270度

  {

  char * * y=new char *[n];

  for(int I=0;我我)

  {

  y[I]=新字符[n];

  for(int j=0;j j)

  {

  y[I][j]=x[I][j];

  }

  }

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  y[j][n-1-I]=x[I][j];

  }

  }

  返回y;

  }

  char **f4(char x[10][10])

  {

  char * * p=new char *[n];

  //cout F4 endl;

  for(int I=0;我我)

  {

  p[I]=新字符[n];

  //cout f42 endl;

  for(int j=0;j j)

  {

  p[I][j]=x[I][j];

  }

  }

  for(int I=0;我我)

  {

  for(int j1=0,J2=n-1;J1,J2-)//这个要特别注意!数字

  {

  //cout f43 endl;

  swap(p[i][j1],p[I][J2]);

  }

  }

  返回p;

  }

  int f5(char x[10][10])

  {

  char * * p=F4(x);

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  x[I][j]=p[I][j];

  }

  }

  char * * q=f1(x);

  if(g(q))

  {

  返回1;

  }

  char * * h=F2(q);

  if(g(h))

  {

  返回1;

  }

  char * * l=F3(h);

  if(g(l))

  {

  返回1;

  }

  返回0;

  }

  int main()

  {

  CIN n;

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  CIN a[I][j];

  if(a[I][j]==-)a[I][j]= ;

  }

  }

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  CIN b[I][j];

  if(b[I][j]==-)b[I][j]= ;

  }

  }

  char * * p=NULL

  //1

  //cout 1 endl;

  p=f1(a);

  if(g(p))

  {

  cout 1;

  返回0;

  }

  //2

  //cout 2 endl;

  p=F2(f1(a));

  if(g(p))

  {

  cout 2;

  返回0;

  }

  //3

  //cout 3 endl;

  p=F3(F2(f1(a)));

  if(g(p))

  {

  cout 3;

  返回0;

  }

  //4

  //cout 4 endl;

  p=F4(a);

  if(g(p))

  {

  cout 4;

  返回0;

  }

  //5

  //cout 5 endl;

  if(f5(a))

  {

  cout 5;

  返回0;

  }

  //6

  int flag=1;

  for(int I=0;我我)

  {

  for(int j=0;j j)

  {

  if(a[i][j]!=b[i][j])

  {

  flag=0;

  }

  }

  }

  if(标志)

  {

  cout 6;

  返回0;

  }

  //7

  cout 7;

  返回0;

  }洛古的一个好处就是可以下载一些考点。在运行过程中,我发现一组测试数据有问题,程序会在运行过程中异常终止,即“re”。一般这类问题有很大概率是数组越界,或者无限循环等。这里我用的数组不多,每个数组都有绝对的把握,没有问题。于是,我把目光放在了循环上,循环出现的地方就是我写的函数。因为我在main中调用函数,所以我在每个函数的末尾添加了输出语句cout。因为程序是顺序执行的,如果我的那部分功能没有问题,控制台上会打印出相应的输出语句。

  所以,在以这种方式修改了代码之后,我在这里运行了一组测试数组,发现确实有一个函数有问题。然后,我再次将output语句添加到该函数中,以准确定位它。最后发现问题是f4函数,确实是死循环。而无限循环的原因是I,J,一增一减,循环条件是I!=j,可能会出现。不存在i==j的情况,所以会是一个无限循环。如果换了i j就没问题了~

  以上就是我今天给大家分享的代码调试小技巧。希望对你有帮助~

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: