断点&输出大法快速定位编程错误

断点&输出大法快速定位编程错误

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;
		}

运行的时候每一次计算结果都会输出

这样能够快速排除变量问题

posted @ 2025-01-03 12:31  _ljnljn  阅读(2)  评论(0编辑  收藏  举报