C++程序,没有语法分析程序错误,但结果不对,应该怎样改?谢谢

程序调试方法和技巧;一、改正程序的编译期错误;源程序编制完成后,首先由C++编译程序编译成.o;选择编译菜单(Compile)(或者直接单击快捷;改正编译期错误的方法和一般原则为:;1.改正错误时一般从第一个错误开始,然后依次改正;2.在OutPut窗口中双击指定错误,则系统会自;3.根据情况,每改正一个或几个错误后,应重新编译;二、程序执行时的调试;实践中
程序调试方法和技巧
一、 改正程序的编译期错误
源程序编制完成后,首先由C++编译程序编译成.obj文件,再由连接程序连接成可执行文件。在编译时,如果源程序存在语法错误(errors),则系统不允许连接,直到改正了所有的语法错误后,才能进行连接。另外,编译时还可能存在另一类错误,即警告性错误(warnings),这类错误一般不影响程序的连接,在很多情况下也不影响程序的执行结果,但建议还是尽量把这类错误改正。
选择编译菜单(Compile)(或者直接单击快捷工具栏上的编译按钮)对编译好的源程序进行编译,在集成环境下方的OutPut窗口中将会显示相应的编译信息(若OutPut窗口没有出现,则可以在快捷工具栏上右键单击并在弹出的菜单中选择OutPut菜单项即可打开(或关闭)OutPut窗口)。若程序编译没有发现错误,则该窗口中显示“***.exe - 0 error(s), 0 warning(s)”,这时可以进行程序的连接;若编译后存在语法错误或警告错误,该窗口中则显示两类错误的个数,并列出相应的错误位置和原因。
改正编译期错误的方法和一般原则为:
1.改正错误时一般从第一个错误开始,然后依次改正后续的错误。因为前面错误的出现,往往会导致编译系统在编译时错位,把本来正确的语句认为是错的,也可能把某些语句的错误掩盖掉。所以当改正了前面的错误后,可能会使错误量减少很多,也可能增加很多;
2.在OutPut窗口中双击指定错误,则系统会自动定位到该错误出现的位置,并在错误语句前面用一个蓝色子弹头标识。注意,该标识只是告诉程序员编译时在此位置出错了,真正的错误可能出现在该标识语句的前一语句或后一语句,如函数定义时,在小括号后加了分号,错误标识将出现在左大括号处;
3.根据情况,每改正一个或几个错误后,应重新编译一下,然后再从第一个错误进行改错,直到所有错误都被改正过来。
二、 程序执行时的调试
实践中发现,往往很小的程序在执行时也会出现错误。当一个程序可以被连接成功,但执行时却存在不正常现象,如不能得到预期的运行结果或出现死机等,而一下子又很难找出出错原因时,可以采取以下方法查错、改错。
1.单步跟踪执行命令
单步跟踪执行程序,能够清楚地看到程序的一步步执行过程,从而判断出源程序的执行流程是否与事先设计的流程一致,从中发现造成死循环或死机的原因所在。C++集成环境提供的单步跟踪命令有“Step Into”和“Step Over”两种,当选择这两个命令时,程序进入DEBUG(调试)状态,并在main函数的左大括号处出现一个黄色的子弹头标识,意味着程序从此处开始执行,以后每执行一次这两个命令之一,则程序执行一行,若程序每一行只有一个语句,则相当于一次执行了一个语句。这两个命令的区别如下:
? “Step Into”:对应的快捷键为F11,在单步执行过程中,若当前
执行的语句是函数调用语句,则执行一次该命令将会跟踪至被调用函数内部继续单步跟踪执行。
? “Step Over”:对应的快捷键为F10,在单步执行过程中,若当前
执行的语句是函数调用语句,也不会跟踪到被调用函数内部执行,而是直接把该函数调用作为一个语句一次执行完成,到当前函数的下一语句继续跟踪执行。
在具体操作时,这两种单步跟踪命令往往配合使用:一般先使用“Step Over”命令单步跟踪执行,当执行到某函数调用处时,如果需要跟踪至被调用函数内部,则再使用一次“Step Into”,然后继续使用“Step Over”命令。
2.执行到光标所在行命令
该命令可以一次执行到鼠标光标所在的程序语句位置。
在进行程序的调试时,有时能够确认在某语句之前的所有语句都是正确的,如果对这些语句进行单步跟踪会增加不必要的调试时间,此时可以使用该命令,执行让程序执行到光标所在行,然后在配合单步跟踪,能够有效地提高调试的效率。
该命令对应的快捷键为:Ctrl+F10。
3.设置断点命令
设置断点是另一种能够快速执行到程序指定行的方法:首先把光标停在需设置断点的位置,然后按F9(或工具栏上的“手形”按钮),则在指定行出现一个红色的实心圆,表示一个断点设置完毕。如果需要设置其它的断点,则重复以上步骤即可。断点设置完毕,按F5,则程序一次性执行到第一个断点所在位置,以后每按一次F5,程序将执行到下一断点,执行程序执行完毕。在执行过程中,也可以增加其它的断点。
在有断点的位置,再按一次F9(或工具栏上的“手形”按钮),则可以取消该断点的设置。
在编制的程序比较短,特别是只有一个源程序文件的情况下,单步跟踪和执行到光标所在行命令已经能够很好地完成调试任务。该命令在多文件组织的程序中能够有效地发挥其调试功能。
4.观察程序执行过程中变量和表达式值的变化
在使用以上命令进行调试过程中,通过观察当前执行点相关变量或表达式的值,能够有效地发现错误出现的原因和位置。
在调试状态下,集成环境窗口下方会出现两个窗口(如果这两个窗口没有出现,可以在调试状态下右键单击工具栏空白处,在弹出的菜单中进行选择),如图FL2.1所示。
FL2.1 调试窗口
一个是变量(Variables)窗口,另一个是观察(Watch)窗口,前者实时地列出了当前执行点前后最近位置的变量的当前值。后者提供了4个观察子页面,可以在其中任何一个页面中输入想观察值的变量或表达式,然后观察其值。
该调试功能可以与以上的调试命令配合使用,以完成调试任务。
程序调试完毕,或想取消程序的调试状态回到编辑状态,可以选择集成环境调试(Debug)菜单中的“Stop Debugging”命令或直接按“Shift+F5”快捷键,即能够达到目的。
三亿文库包含各类专业文献、文学作品欣赏、外语学习资料、中学教育、专业论文、幼儿教育、小学教育、行业资料、C++程序调试方法和技巧06等内容。 
 Visual C++程序调试方法入门_电脑基础知识_IT/计算机_专业资料。Visual C++程序...断点是 最常用的 技巧。调试时,只有设置了断点并使程序回到调试器,才能对程序...  实验一_熟悉Visual_Studio_程序调试方法_计算机软件及应用_IT/计算机_专业资料。中国石油大学(华东) Visual C++ 语言实验 实验一 熟悉 Visual Studio 程序调试方法一...  c++编程中的调试技巧(C++编程思想) 1.调试标记 适用预处理#define 定义一个或多个调试标记,在代码中把调试部分使用#ifdef 和#endif 进行管理。当程序最终 调试...  Visual C++程序调试方法入门Visual C++程序调试方法入门隐藏&& 调试是一个程序员...当程序运行到断点时,程序中断执行,回到调试器。断 点是 最常用的技巧。调试时...  程序调试技巧 11页 免费 程序调试技巧 16页 2下载券 C++程序调试方法和技巧 4...论程序的调试技巧 技巧【关键字】调试技巧、测试方法、测试用例设计 【摘要】...  c++程序的调试与运行_计算机软件及应用_IT/计算机_专业...3、运行 运行可执行文件的方法很多,通常编译系统的...21页 1下载券 DW使用技巧 24页 免费©2014 Baidu...  C++程序调试方法和技巧 4页 免费 程序的调试方法 18页 1下载券 调试C程序的方法...两种“动态调试程序”的方法――写给编程的新人们 两种“动态调试程序”的方法...  Visual C++开发工具与调试技巧整理 1、如何在 Release 状态下进行调试 Project-&...如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生...  “工欲善其事必先利其器”,下面我介绍 一下 DEVC++编译器的调试功能,这个...因此, 把调试工具和后我们以前的调试技巧结合起来使用,我们的程序就能 很快的...您的位置:
C/C++程序运行时的异常处理
日 20:31:54 | 作者:佚名 | 来源:中国IT实验室
摘要:程序中的错误分为编译时的错误和运行时的错误。编译时的错误主要是语法错误,比如:
程序中的错误分为时的错误和时的错误。编译时的错误主要是语法错误,比如:句尾没有加分号,括号不匹配,关键字错误等,这类错误比较容易修改,因为编译系统会指出错误在第几行,什么错误。而运行时的错误则不容易修改,因为其中的错误是不可预料的,或者可以预料但无法避免的,比如内存空间不够,或者在调用函数时,出现数组越界等错误。如果对于这些错误没有采取有效的防范措施,那么往往会得不到正确的运行结果,程序不正常终止或严重的会出现死机现象。我们把程序运行时的错误统称为异常,对异常处理称为异常处理。C++中所提供的异常处理机制结构清晰,在一定程度上可以保证程序的健壮性。
C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理。如此逐级上传,直到最高一级还无法处理的话,运行系统会自动调用系统函数terminate,由它调用abort终止程序。这样的异常处理方法使得异常引发和处理机制分离,而不在同一个函数中处理。这使得底层函数只需要解决实际的任务,而不必过多考虑对异常的处理,而把异常处理的任务交给上一层函数去处理。
C++的异常处理机制有3部分组成:try(检查),throw(抛出),catch(捕获)。把需要检查的语句放在try模块中,检查语句发生错误,throw抛出异常,发出错误信息,由catch来捕获异常信息,并加以处理。一般throw抛出的异常要和catch所捕获的异常类型所匹配。异常处理的一般格式为:
下面我们用示例演示一下异常处理:
看了上述的示例代码,也许有人会问,第二个双精度类型的除法计算也应该抛出异常才对啊,在实际的运行过程中并非如此,其实该双精度类型除法函数根本没有被执行过。以上程序的执行规程为:调用函数Div(x,y)时发生异常,由函数Div中的语句"throw y"抛出异常,并不在往下执行return x/y(+微信关注网络世界),接着catch捕获int类型的异常并处理异常,最后直接执行"return 0"。因此函数Div(x1,y1)和catch(double){}模块根本没有被执行。如果,我们把y的值改为1,则结果就变成为:
如果在执行try语句模块时,没有发生异常,则catch语句块不起作用,流程转到其后的语句继续执行。从上述两个结果中可知第一次throw抛出的int类型所以找到处理该类型的catch,而第二次是抛出double类型所找到的是处理double类型的catch。
下面对异常处理补充几点:(1)try和catch块中必须要用花括号括起来,即使花括号内只有一个语句也不能省略花括号;(2)try和catch必须成对出现,一个try_catch结果中只能有一个try块,但可以有多个catch块,以便与不同的异常信息匹配;(3)如果在catch块中没有指定异常信息的类型,而用删节号"...",则表示它可以捕获任何类型的异常信息;(4)如果throw不包括任何表达式,表示它把当前正在处理的异常信息再次抛出,传给其上一层的catch来处理;(5)C++中一旦抛出一个异常,如果程序没有任何的捕获,那么系统将会自动调用一个系统函数terminate,由它调用abort终止程序
最后还是一样,我将用一个示例来总结一下今天所讲的内容(开发工具:vs2010):
[责任编辑:软件频道 ]
正在加载...
我也说几句
汇编一周来国内外网络和IT行业发生的焦点新闻,精挑细选,第一时间推送独家采写的深度报道和热点专题,深入挖掘新闻事件背后的故事,剖析新闻事件的来龙去脉,让读者准确把握业界的发展态势。
汇集存储频道每周精华内容,让您在最短的时间内,以最便捷的方式获取权威的购买指南,专家博客,皆汇聚在此。
定期为您带来深入权威的网络,交换机,路由器,无线,通信领域信息服务,涵盖产品,技术,新闻,应用案例,评测,购买指南,专栏,技巧等多个方面的信息。与企业网络相关的一切,尽在网络通信邮件,您怎可错过?
新一代数据中心建设管理最新信息快递――聚焦新一代绿色数据中心的设计、建设、运营和管理,汇集业界专家与用户的最精粹观点,展示国内外数据中心经典案例!
定期为您带来安全领域权威专业的产品,技术,新闻,应用案例,评测,购买指南等信息,保护您在网络畅游之时不受病毒的威胁,企业运行之际减少安全的风险。一份邮件在手,一份安全在心!
深入、专业关注云计算相关的技术与实践,范围覆盖私有云建设、公有云服务运营、开源云平台发展、重要云服务商动态等领域,面向企业CIO和IT经理提供深度原创报道,以及云计算、云服务领域最新的市场资讯。
汇集软件频道每周精华内容,让您在最短的时间内,以最便捷的方式获取权威的企业软件新闻,SOA,SaaS,BI,ERP,开源技术,产品,技巧等全方面的实用资讯。还犹豫什么,这就开始体验一下吧!
深入、专业关注大数据相关的技术与实践,提供Hadoop、NoSQL等领域的最新技术资讯,定期发布由业界专家撰写的大数据专栏文章,面向企业CIO、IT经理、DBA提供深度原创报道,以及大数据领域的最新市场资讯。
汇集服务器频道每周精华内容,让您在最短的时间内,以最便捷的方式获取权威的服务器虚拟化,刀片服务器,操作系统,大型机,服务器芯片信息,最新最全的服务器技巧,购买指南,专家博客,皆汇聚在此。
网界网网络学院频道,内容涵盖移动互联,技术开发,Web前端,安全,网络通信,云计算,数据中心,存储,服务器,软件等内容。
订阅过的用户,全部取消选择,可取消订阅
网络世界移动客户端网界网微信订阅号

我要回帖

更多关于 微信小程序语法 的文章

 

随机推荐