《C语言课程设计》一1.1 VC 6.0简介

    xiaoxiao2021-04-19  232

    1.1 VC 6.0简介

    Visual C++ 6.0是Microsoft公司推出的开发Win32程序的集成开发环境,可将“高级语言”翻译为“机器语言(低级语言)”,并支持面向对象可视化编程。它具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置即可使其生成的程序框架支持数据库接口、OLE和WinSock网络。Visual C++ 6.0, 简称VC 6.0或VC 6,是微软公司于1998年推出的Visual Studio系列的第6版,一经推出,便受到众多编程人员的欢迎,并成为专业程序员进行软件开发的首选工具。即使微软公司继续推出Visual C++ .NET(VC 7)、Visual C++ 2005(VC 8)、Visual C++ 2008(VC 9)、Visual C++ 2010(VC 10),但VC 6.0仍以其界面简洁、占用资源少、操作方便等优点受到广大编程人员热爱。VC 6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(Integrated Development Environment,IDE)。VC 6.0通过一个名为Developer Studio的组件,将其他多个开发组件(包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等)集成为一个和谐的开发环境。 VC 6.0的优点如下:1)同时支持面向过程和面向对象的程序开发。2)界面简单、资源消耗小、操作方便。3)VC 6.0进行Windows应用程序的开发主要有两种方式:一种是Win API方式,另一种是MFC方式。MFC(Microsoft Foundation Class)是微软公司提供的一个类库(class library),以C++类的形式封装了Windows的API,并且包含一个应用程序框架。传统的WinAPI开发过程比较繁琐,MFC对WinAPI进行再次封装,因而MFC相对于WinAPI开发更具备效率优势。4)VC 6.0作为一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用VC 6.0开发应用程序的过程中,系统能自动生成大量各种类型的文件,大大简化了程序开发人员的工作。VC 6.0的缺点如下:1)对C++标准支持不完全,例如对模板的支持比较差。2)需要打补丁,否则不够稳定。最新补丁为SP6,推荐安装,否则编译时易出现假死现象。3)仅支持Windows操作系统,不支持其他操作系统如Linux。另外,与最新的Windows 7不兼容,在Win7系统下VC 6.0安装成功后会出现无法打开cpp文件的现象。4)界面开发功能不够强大。

    1.1.1 VC 6.0创建Win32控制台工程

    本节主要演示利用VC 6.0创建Win32控制台工程的步骤,编程环境为VC 6.0 SP6英文版。 第一步,点击File→New,弹出New对话框,如图1-1所示。选择左上角标签的“Projects”,在列表框中选择“Win32 Console Application”,并且将右边的“Project name”和“Location”分别设置好,点击OK按钮。本步骤的功能是:选择工程类型,设置工程名与工程路径。在VC 6.0下代码均以工程的形式出现,不像DOS下以单一文件出现。示例中工程名为“myTestProject”,工程路径为“D:TEST”。

    第二步,点击OK按钮后,又弹出一个对话框,如图 1-2所示,选择所创建控制台工程的类型。对话框中有四个选项“An empty project”、“A simple application”、“A ‘Hello World!’application”、“An application that supports MFC”。

    若选择 An empty project 项将生成一个空的工程,工程内不包括任何东西,如任何h文件和cpp文件。 若选择A simple application项将生成包含一个空的main函数的cpp文件和一个空的头文件的工程。 选择A “Hello World!” application 项与 A simple application 项没有什么本质的区别,仅在main函数内部出现hello world的输出语句。 若选择 An application that supports MFC 项将可以利用VC 6.0所提供的类库来编程。第三步,我们从一个空的工程来开始我们的工作,以便更清楚地展示编程的各个环节。选择 An empty project 项,单击 Finish 按钮,这时VC 6.0会为你生成一个小型报告,报告的内容是刚才所有选择项的总结,并且询问你是否接受这些设置。如果接受,单击OK按钮,否则单击Cancel 按钮。执行完上述操作后进入到真正的编程环境,如图 1-3所示,界面分为四个部分:屏幕的最上面是菜单和工具条,在工具条上可通过右键设置显示哪些工具条。屏幕左边有一个Workspace 窗口,窗口中默认包含两个标签,一个是 ClassView,一个是 FileView。ClassView 中列出的是这个工程中所包含的所有类的信息,当然本书程序为C语言程序,均不涉及类,因而当前ClassView标签下是空的。FileView标签中列出的是这个工程包含的所有文件的信息。打开该标签下所有层次会发现有三个文件夹,Source Files 文件夹中包含了工程中所有的源文件,Header Files 文件夹中包含了工程中所有的头文件,Resource Files 文件夹中包含了工程中所有的资源文件。所谓资源就是工程中所用到的对话框、菜单、位图、加速键等信息,这些在图形界面应用程序中会应用到,而在本书中编程均为控制台程序,不会涉及这一部分内容。当前工程为一个空工程,因而现在 FileView 中也不包含任何东西。在本书后续截图中Workspace窗口中除了FileView标签和ClassView标签外,还包含VA View 和VA Outline 标签。后面这两个标签是安装Visual Assist 插件后产生的。Visual Assist是Visual Studio系列编程工具中著名的插件,能自动识别各种关键字、系统函数、成员变量,自动给出输入提示,自动更正大小写错误,自动标示错误等,有助于提高开发过程的自动化和开发效率。屏幕的右边是视图区,打开的文件将在视图区显示出来。屏幕的下端是 Output 窗口,程序编译调试、代码查找结果等信息将在Output窗口中显示输出。

    通过之前的步骤,生成一个空的工程。下面我们将循序渐进地生成我们的程序。 首先生成一个源文件,选择菜单 Project 中子菜单 Add To Project 下的New项,或者选择菜单File下的New项,在出现的对话框中选择 Files 标签,在列表框中选中 C++ Source File 项,选中 Add to project 复选框,在下拉列表框中选中刚创建的工程myTestProject,然后在 File 文本框中为将要生成的文件取一个名字,我们为文件取名为 main.cpp,并在 Location 文本框中为文件选择一个存储目录,如图 1-4所示。

    在File栏输入文件名,示例中输入文件名main.cpp,点击OK按钮后在该工程下创建main.cpp文件。

    1.1.2 程序编译及异常原因分析

    本节中通过一个示例程序演示程序编译及调试步骤。示例代码实现如下功能:从键盘中输入一个a~z间的字符,验证输入。输入不满足要求时,循环输入。在main.cpp函数里输入程序代码:

    #include <stdio.h> int main(int argc, char* argv[]) { char chInput = '0'; printf("本程序功能:\n1 验证字符输入,不满足要求时循环输入;" "\n2 清空输入缓冲区函数fflush(stdin)的演示\n\n"); printf("请输入a-z之间字符:"); scanf("%c",&chInput); while(chInput >'z' || chInput < 'a') { //fflush(stdin); //清空输入缓冲区 printf("\n输入字符不在 a-z之间,请重新输入。"); printf("请输入a-z之间字符:"); scanf("%c",&chInput); } printf("输入正确!\n"); return 0; } 编译运行及结果分析点击菜单Build→build (工程名) .exe或工具栏上的按钮编译链接生成可执行程序。程序运行界面如图1-5所示。

    程序运行,发现存在异常。当输入一个不在a~z之间的字符时,会连续输出两次提示信息,如图 1-6所示。若输入多个不在a~z间的字符,程序出现异常状况,如输入“123”,“67”,程序异常行为如图 1-7所示。程序异常分析:程序中是通过语句scanf(“%c”, &chInput)从键盘中输入数据对变量赋值的。当键入字符A并按下Enter键进行确认时,输入缓冲区存在两个字符的输入:1为‘A’,2为Enter键对应的字符(ASCII码为十进制的13)。

    程序异常原因:未清空输入缓冲区,把Enter键对应的字符也赋给变量,因而输出两次错误提示信息。修改程序,取消代码中“//fflush(stdin);”处的注释。编译运行结果如图1-8所示,满足编程要求。

    清空缓冲区的方法通过fflush(stdin)操作输入流(清空输入流),是对C标准的扩充(MSDN文档中写着:fflush on input stream is an extension to the C standard)。本书中介绍的Dev- C++、 VC 6.0、VS 2008编辑器均支持这个功能。

    若编译器(如GCC 3.2)不支持fflush(stdin)这种方法清空输入缓冲区,可采用“while ( (c=getchar()) != 'n' && c != EOF ) { ; }”方法清空输入缓冲区,将示例代码中的fflush(stdin)换成该语句,同时增加字符变量c的定义语句“char c”,编译即可。

    1.1.3 VC 6.0调试

    一般情况下,VC 6.0中从AppWizard创建的工程中自动包含调试信息。若当前工程配置中不支持调试,需要在菜单Project→Setting中设置。1.1.2节中直接给出了代码运行异常的原因,但实际编程过程中,需要进行调试才能分析出具体的错误原因或异常原因。下面以上节代码为例,介绍VC 6.0的Debug调试的一般步骤。前面提到过,Debug调试的一般步骤为:设置断点、开始调试、添加查看、单步调试、停止调试,下面分别介绍。

    设置断点断点是调试器设置的一个代码位置,是最常用的调试方法。进行调试时,一开始程序处于运行状态。运行到断点处,程序中断执行,回到调试器,由运行状态转换到调试状态。调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。

    可以通过下述方法设置一个断点。首先把光标移动到需要设置断点的代码行上,然后按如下四种方式操作设置断点:1)按F9快捷键。 2)按快捷键Ctrl+B或Alt+F9,或者通过菜单Edit/Breakpoints打开Breakpoints对话框。打开后在Location标签下点击Break at编辑框右侧的箭头,选择合适的位置信息。一般情况下,直接选择line ×××就足够了,如果想设置不是当前位置的断点,可以选择Advanced,然后填写函数、行号和可执行文件信息。还可以在Data标签下设置数据断点,调试过程中当输入变量改变时或者输入表达式成立时触发断点;在Message标签下设置消息断点,当程序产生某条消息时触发断点(数据断点和消息断点为较高级的断点设置,后文中若没有特别说明,断点均指位置断点)。3)点击右键,选择Insert/Remove Breakpoint,如图 1-9所示。4)点击工具栏按钮。

    若断点为位置断点,设置成功后,会在相应代码行前显示。本例中,程序运行后发现输出提示信息异常,因而在while循环体内第一条语句前设置断点,如图 1-10所示。

    开始调试开始调试后,程序一开始处于运行状态。运行到位置断点代码处暂停,处于调试状态。点击菜单Build→Start Build→Go或者按F5快捷键,或者点击工具栏按钮进行调试。

    输入字符“A”并按Enter键回车后,程序运行到断点处暂停,返回调试器。此时程序处于调试状态下,如图 1-11所示。

    显示当前程序暂停的位置(位于待运行代码行前)。图 1-11表示,程序在断点所处代码行运行前暂停,即在第一次while循环体执行前暂停,并返回调试器。

    添加查看图1-11中代码窗口下侧为调试程序时经常使用到的两个调试窗口,Variables窗口和Watch窗口。在菜单View→Debug Window下可以设置是否显示这两个窗口。

    Variables窗口:Variables窗口包含三个选项卡。Auto选项卡显示运行程序当前行以及上一行中所使用的变量;Locals选项卡显示在当前执行的函数内具有局部定义的所有变量(包括局部变量和传入函数的参数);this选项卡显示this指针当前所指向的对象内部的成员变量。可以通过Variables窗口修改简单类型变量的当前值(比如:int、double),只要在窗口中双击该值就可以修改了。Watch窗口:可以在Watch窗口中手工将表达式输入到Name域中,或者拖曳表达式,或者从剪贴板粘贴。Watch窗口中也可以修改简单类型的变量的值。通常调试人员将希望关注的变量加入Watch窗口,以监视整个调试过程中该变量的变化情况。例如,本例中输出提示信息异常,因而需要监视chInput变量的变化情况。图1-11中将chInput变量加入Watch窗口,当前chInput值为65(字符‘A’的ASCII码)。

    单步调试单步调试动作按钮包括:、、和,下面分别介绍。

    step into(F11键)表示程序从当前位置开始单步运行,遇到函数调用则进入到函数定义中执行。step out(Shift+F11组合键)表示程序跳出当前函数定义,直接执行函数调用的下一行(与step into配套使用)。step over(F10键)表示程序从main函数开始单步执行,遇到函数调用则越过函数定义执行调用的下一行。run to cursor(Ctrl+F10组合键)表示程序从main函数或当前运行位置开始,执行到光标所在行。在图1-11状态下,连续使用step over 进行调试,观察程序运行过程。程序在执行完一次while循环体后,判断chInput的值满足循环条件,继续执行第二次循环(也可在图 1-11状态下,按F5键或点击工具栏按钮继续调试),程序第二次在断点处暂停,如图 1-12所示。由此可发现程序的错误,并可以分析出异常原因。如1.1.2节所述,程序异常原因是未清空输入缓冲区,把Enter键对应的字符也赋给变量,因而输出两次错误提示信息。找到程序异常原因后即可修改程序,使其符合设计目标。修改程序,取消代码中“//fflush (stdin);”的注释,编译运行即可。

    停止调试停止调试分为:

    自动停止调试:程序退出时,调试过程自动结束。手动停止调试:点击菜单Debug→Stop Debugging 或工具栏上的按钮结束调试。

    相关资源:七夕情人节表白HTML源码(两款)

    最新回复(0)