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

简介: 本节书摘来自华章出版社《C语言课程设计》一书中的第1章,第1.1节,作者 刘博 董学文,更多章节内容可以访问云栖社区“华章计算机”公众号查看

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”。

image

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

若选择 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窗口中显示输出。

image

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

在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;
}
  1. 编译运行及结果分析
    点击菜单Build→build (工程名) .exe或工具栏上的按钮编译链接生成可执行程序。程序运行界面如图1-5所示。

image

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

image

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

image

  1. 清空缓冲区的方法
    通过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. 设置断点
    断点是调试器设置的一个代码位置,是最常用的调试方法。进行调试时,一开始程序处于运行状态。运行到断点处,程序中断执行,回到调试器,由运行状态转换到调试状态。调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。

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

image

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

image

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

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

image

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

  1. 添加查看
    图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码)。

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

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);”的注释,编译运行即可。

image

  1. 停止调试
    停止调试分为:

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

相关文章
|
3月前
|
Unix 关系型数据库 MySQL
C语言简介
C语言简介。
20 0
|
6月前
|
C语言
【C语言课程设计】医院管理系统
【C语言课程设计】医院管理系统
113 0
|
6月前
|
存储 安全 Unix
01 C语言 - 简介
01 C语言 - 简介
21 0
|
7月前
|
Unix 关系型数据库 MySQL
C语言简介
C语言简介。
48 0
|
8月前
|
C语言
C语言:二级指针简介
二级指针即为二级指针变量,用于存放一级指针变量的地址。 一级指针变量是用来存放普通变量的地址(地址其实就是一些数字),一级指针变量也是一个变量,存放普通变量地址的同时自身也是有地址的。那么一级指针变量的地址就需要二级指针变量来存放。
49 0
|
2月前
|
存储 文件存储 C语言
《C语言程序设计》课程设计 -- 火车票票务管理系统
《C语言程序设计》课程设计 -- 火车票票务管理系统
30 1
|
6月前
|
C语言
【C语言课程设计】通讯录(3.0版本)
【C语言课程设计】通讯录(3.0版本)
58 0
|
6月前
|
C语言
【C语言课程设计】通讯录(2.0版本)
【C语言课程设计】通讯录(2.0版本)
30 0
|
6月前
|
存储 C语言
【C语言课程设计】通讯录(1.0版本)
【C语言课程设计】通讯录(1.0版本)
38 0
|
6月前
|
存储 测试技术 数据库
【C语言课程设计】图书管理系统
【C语言课程设计】图书管理系统
74 0