第4章 C#语句
每种编程都包含逻辑关系的控制,这是程序代码中不可或缺的一部分,这些控制语句增强了程序代码处理逻辑关系的能力。每种语言的控制语句都分成两大部分,即条件跳转语句和循环控制语句。C#编程语言也不例外,这些控制语句被定义为关键字,在程序中控制代码的执行。在实际应用的时候,应该根据具体处理的顺序和逻辑,选择适当的控制语句。
4.1 使用break语句
break语句有两种作用,一种是终止最近的一个封闭循环,然后执行循环外部的程序语句;另一种是在该语句所处的switch语句中,终止当前的case条件判断处理,转向下一个case条件的判断。
技术要点
本示例主要说明了在C#程序中break语句的两种用法,技术要点如下。
● break语句在循环语句中的作用主要是跳出循环,该语句在循环中,不是循环语句的语法所要求的,即在循环体内部处理时,不使用break语句跳出循环不会引起编译上的语法错误。
● 在循环中使用break语句,有助于提高程序的运行效率。
● 在switch语句中使用break语句,是switch语句的语法所要求的,即在switch语句中,每个case判断必须使用break、goto、return等跳转语句作为结束,以决定程序继续下一个case条件判断还是跳出switch语句。
● 当在case判断中使用break语句时,终止switch分支判断,执行switch语句的后续程序代码。
实现步骤
(1)创建控制台应用程序项目,命名为“BreakExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace BreakExample { class Program { static void Main(string[] args) { for (int i = 1; i <= 100; i++)//for循环中的break跳转 { Console.WriteLine("循环索引的当前位置是:{0}",i); if (i == 4) { break;//当索引值为4时跳出循环 } } MyCity currCity = MyCity.BeiJing;//声明一个枚举变量用于分支控制 Console.Write("您现在的位置是:"); switch (currCity)//switch语句中的break跳转 { case MyCity.BeiJing: Console.WriteLine("北京市。"); break;//结束switch语句 case MyCity.ShangHai: Console.WriteLine("上海市。"); break; case MyCity.TianJin: Console.WriteLine("天津市。"); break; case MyCity.ChengDu: Console.WriteLine("成都市。"); break; default: Console.WriteLine("对不起,没找到。"); break; } Console.ReadLine(); } } enum MyCity//表示所在城市的枚举 { BeiJing, ShangHai, TianJin, ChengDu } }
(3)按F5键运行程序,运行结果如下所示。
循环索引的当前位置是:1 循环索引的当前位置是:2 循环索引的当前位置是:3 循环索引的当前位置是:4 您现在的位置是:北京市。
源程序解读
(1)本示例在循环语句中break语句的使用方法,在循环未完成时,遇到满足条件的索引,即跳出循环,在本示例中,当索引为4时即跳出循环,继续执行for循环后面的代码,而不必完成100次循环,提高了程序的执行效率。
(2)在switch分支控制语句中,break的作用主要是防止贯穿。在C#编程语言中,switch语句是不允许贯穿的,即当前case条件判断语句,不能执行下一个case条件判断中的程序代码。
(3)本示例声明一个枚举类型,以用于switch语句的分支控制。
4.2 使用continue语句
continue语句的作用是在封闭循环中终止循环内部后续语句的执行,转向下一次循环。
技术要点
本示例主要说明了continue语句在封闭循环中的作用,技术要点如下。
● continue语句的主要用途,是在循环中当指定条件满足时,忽略循环内部后续程序代码的执行。
● continue语句执行后,循环进入下一次迭代。该语句常见于for、foreach、while循环体中。此时,程序代码的执行位置返回循环体头部。
实现步骤
(1)创建控制台应用程序项目,命名为“ContinueExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace ContinueExample { class Program { static void Main(string[] args) { //创建一个员工数组 Employee[] emps = { new Employee("Steven", "Buchanan", 26), new Employee("Janet", "Leverling", 23), new Employee("Margaret", "Peacock", 47), new Employee("Andrew","Fuller",31)}; Console.WriteLine("年龄从25到35的员工有:"); foreach(Employee Emp in emps)//遍历数组 { if (Emp.Age < 25 | Emp.Age > 35) continue;//不符合条件则移动到下一个员工,后面的代码将被忽略 Console.WriteLine(Emp.FirstName+ " " + Emp.LastName); } Console.ReadLine(); } class Employee//声明一个员工类,用于表示员工的信息数据 { public string FirstName; public string LastName; public int Age; //定义员工类的构造函数 public Employee(string firstname, string lastname, int age) { FirstName = firstname; LastName = lastname; Age = age; } } } }
(3)按F5键运行程序,运行结果如下所示。
年龄从25到35的员工有: Steven Buchanan Andrew Fuller
源程序解读
(1)本示例定义了一个Employee类,该类描述一个员工的基本信息:姓名和年龄。并定义了包含参数的构造函数,以方便地创建Employee类的实例。
(2)本示例的主程序首先创建一个员工数组,并将该数组的员工赋值,然后在员工数组中遍历循环,当员工的年龄大于25并小于35时,显示员工的姓名。
(3)在foreach循环中执行continue语句,将忽略该语句后面的输出代码,而移动到数组中的下一个元素,继续循环判断。
4.3 使用do语句
do语句的作用是重复执行包含在该语句后的位于“{}”内部的代码段,直到执行条件不能满足。do语句首先执行代码段,然后再判断是否重复执行,位于do后“{}”内部的代码段至少执行一次。
技术要点
本示例主要说明了do语句的使用方法,技术要点如下。
● do语句是一种循环语句,特点是先执行再判断是否需要重复。
● do本身没有提供迭代器,许多情况下,需要在程序中为do语句定义一个迭代器,如果需要多次使用迭代器,应注意该迭代器的复位。
● do语句必须与位于“{}”之后的while语句成对使用,while语句负责提供是否重复执行的判断条件。
实现步骤
(1)打开VS2008,创建控制台应用程序项目,命名为“DoExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace DoExample { class Program { static void Main(string[] args) { int i=0;//定义do语句的迭代器 int chr = 0; string teststr = "It's a test# string."; do//取首字符的编码,说明do语句至少执行一次 { chr = teststr[i]; Console.WriteLine("首字符{0}的编码是{1}", teststr[i], chr); i++;//迭代器自增 } while(false); Console.WriteLine("---------------------------"); i = 0;//迭代器复位,do本身没有迭代器,迭代器使用完毕以后注意归零 do//截取“#”之前的字符,将这些字符及其编码显示出来 { chr = teststr[i]; Console.WriteLine("字符{0}的编码是{1}", teststr[i], chr); i++;//迭代器自增 } while (teststr[i]!='#'); Console.ReadLine(); } } }
(3)按F5键运行程序,运行结果如下所示。
首字符I的编码是73 --------------------------- 字符I的编码是73 字符t的编码是116 字符'的编码是39 字符s的编码是115 字符 的编码是32 字符a的编码是97 字符 的编码是32 字符t的编码是116 字符e的编码是101 字符s的编码是115 字符t的编码是116
源程序解读
(1)本示例的第一个do语句,说明了不管while判断条件如何,do语句首先执行一次,执行完毕以后再判断是否重复执行。在输出字符串首字符的代码段中,while中的条件总为false,do语句仍然执行了一次。
(2)do语句之后“{}”内部的代码段,应包含迭代器的自增长,在本示例中使用整型的迭代器i,do语句之后“{}”内部的代码段中包含的i++语句,实现迭代器的自增长,.NET Framework中的一些类,如TextReader类,自身已经包含了迭代器,在这种情况下可以不在程序中提供迭代器。
(3)do语句必须与while语句成对使用,在while语句中的条件不能满足时,不再重复执行,而继续执行后续的程序代码。
4.4 使用foreach语句
foreach语句的作用,是遍历数组或集合对象。在foreach语句中不需要知道数组或集合对象的元素个数,循环的迭代由数组或集合对象实现的接口方法来实现,foreach语句只是调用这些接口方法。当数据或者集合对象中的成员循环遍历完成以后,继续执行foreach后面的程序代码。foreach语句循环可以指定集合对象中需要遍历的数据类型。
技术要点
本示例主要说明了foreach语句的使用方法,技术要点如下。
● 如果数组或者集合对象包含不同数据类型的元素,那么当foreach语句循环指定集合对象中需要遍历的数据类型时,在循环内部需要对当前对象的数据类型进行判断。
● foreach语句不需要知道数组和集合对象的元素个数,循环迭代由数组或对象本身提供的接口实现方法完成。
● ArrayList的元素数据类型为Object,在为ArrayList添加值类型元素的时候,实际上进行了装箱操作。
● foreach语句中对值类型元素进行迭代时,实际上包含了一个将值类型的数据装箱的过程,将值类型数据转换为引用类型的数据。
实现步骤
(1)创建控制台应用程序项目,命名为“ForeachExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace ForeachExample { class Program { static void Main(string[] args) { ArrayList emparray = new ArrayList();//定义一个ArrayList实例 emparray.Add("张三");//在动态数组中添加不同数据类型的元素 emparray.Add(1200); emparray.Add("李四"); emparray.Add(1500); emparray.Add("王五"); emparray.Add(1700); foreach (object strName in emparray)//在数组中foreach迭代循环 { //判断元素的数据类型是否为System.String if (strName.GetType().FullName == "System.String") { Console.WriteLine(strName); } } Console.ReadLine(); } } }
(3)按F5键运行程序,运行结果如下所示。
张三 李四 王五
源程序解读
(1)本示例创建了一个动态数组ArrayList类的实例emparray。ArrayList类位于System.Collections命名空间,应在程序头部加载该命名空间。
(2)在本示例中向动态数组添加了字符串类型和整数类型的元素,因为ArrayList类是以Object类型为元素的数组,所以在ArrayList类中允许不同的数据类型,当值类型被添加到ArrayList类实例时,将会执行把值类型元素装箱的操作。
(3)foreach语句在emparray数组中遍历的时候,因为emparray数组中包含多种数据类型的元素,所以必须对emparray数组当前的元素进行数据类型判断。当数据类型为System.String时,向控制台输出该元素。
4.5 使用for语句
for语句表示开始重复执行一段代码,直到循环条件不能满足。for语句分为三部分,第一部分是声明并初始化迭代器,第二部分是是否重复执行代码段的条件,第三部分是迭代器自增语句。这三部分在语法上都不是必需的。
技术要点
本示例程序中编写了三个示例,主要说明了for语句的一般使用方法和特殊情况的使用方法,技术要点如下。
● for语句最常见的使用方式是使用int或者long类型的变量作为迭代器,使用迭代对象的已知长度或者范围作为循环条件,最后使用“++”操作符递增int或者long迭代器。
●在一些特殊情况下,不需要完全给出for语句的三个部分,只需要给出程序需要的部分即可。
● 在未指定循环条件的情况下,可以使用break语句跳出循环,继续执行for语句后面的程序代码。
● 在省略for语句中的某个部分时,该部分后的“;”不可省略。
实现步骤
(1)创建控制台应用程序项目,命名为“ForExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace ForExample { class Program { static void Main(string[] args) { //循环示例一 int sum = 1;//保存阶乘值的变量 //最常见的for语句,首先声明并初始化迭代器变量i,然后是循环条件, //最后是迭代器自增语句 for (int i = 1; i <=10; i++) { sum = sum * i;//计算阶乘 } Console.WriteLine("循环示例一(计算阶乘)结果为:"+sum); //循环示例二 string str = "My test string.";//声明一个字符串 string result = ""; for (int i = 0; ; i++)//省略了循环语句的判断条件 { result = result + str[i].ToString() + " ";//使用空格间隔字符串 if (str[i] == '.') break;//遇到句号则跳出循环 } Console.WriteLine("循环示例二(间隔字符串)结果为:" + result); //循环示例三 //以下是只有判断条件的for循环语句,只有按下“Q”键时循环才能结束, //否则会一直循环 for (; Console.ReadKey(true).Key !=ConsoleKey.Q; ) { Console.WriteLine("按下Q键退出。"); } } } }
(3)按F5键运行程序,按下三个不是“Q”的任意键,再按下“Q”键退出程序,运行结果如下所示。
循环示例一(计算阶乘)结果为:3628800 循环示例二(间隔字符串)结果为:M y t e s t s t r i n g . 按下Q键退出。 按下Q键退出。 按下Q键退出。
源程序解读
(1)第一个示例中的for语句是最常用的格式,即全部指定for语句的三个部分,在这个示例中,需要明确阶乘的开始部分和计算范围。
(2)第二个示例中的for语句省略了判断条件部分,实际上这个示例只是将判断条件放到循环的代码段中。当满足某个条件的时候,使用break语句跳出循环。
(3)第三个示例中的for语句省略了迭代器的声明初始化部分和迭代增量部分,只给出了判断条件。在程序运行时,除非按下“Q”键,否则循环会一直执行下去。
4.6 使用goto语句
goto语句有两个用途,一个用途是在循环语句中跳出当前的循环,另一个用途是在switch分支语句中跳转到指定的case标签或者default标签。
技术要点
本示例主要说明了goto语句在switch分支控制语句和for循环语句中的使用方法,技术要点如下。
● goto语句在switch分支控制语句中使用时,可以在不同的case标签之间跳转,在一些比较复杂的情况下使用,switch的分支控制需要互相穿透,而C#的switch语句是不允许在case标签之间穿透的,这时只能通过goto语句在case标签之间进行跳转。
● goto语句在for循环语句中使用时,立即终止当前的循环,直接跳转到指定标签位置执行后续的程序代码。
● goto语句很容易引起程序跳转的逻辑混乱,在结构化的程序编写时应尽量避免滥用。
实现步骤
(1)创建控制台应用程序项目,命名为“GotoExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace GotoExample { class Program { static void Main(string[] args) { //在switch分支控制语句中的示例,要求输入一个数字字符串,表示员工的年龄 Console.Write("请输入当前员工的年龄(23~25):"); //创建员工类实例 Employee currEmployee = new Employee("Janet", "Leverling", int.Parse(Console. ReadLine())); switch (currEmployee.Age) { case 23: Console.Write("年龄为23的员工是:"); goto default;//如果满足条件将跳转到default语句输出员工的年龄。 case 24: Console.Write("年龄为24的员工是:"); goto default; case 25: Console.Write("年龄为25的员工是:"); goto default; default: Console.WriteLine(currEmployee.FirstName + " " + currEmployee. LastName); break; } //在for循环语句中的示例,要求输入一个数字字符串,表示在数组中要查找的值 Console.Write("请输入需要查找的数组元素值:"); int[] iArray = { 12, 15, 18, 21, 24 };//定义数组 int iFind = int.Parse(Console.ReadLine()); int iResult = -1; for (int i = 1; i < iArray.Length; i++) { if (iFind == iArray[i-1]) { iResult = i; goto Found;//查找到结果,跳出循环 } } goto Finished;//查询完成,但未查找到结果 Found://找到结果则显示元素在数组中的位置 Console.WriteLine("第" + iResult + "个元素为查找值"); Finished://无论能否找到元素均显示查找已完成 Console.WriteLine("查找完成"); Console.ReadLine(); } class Employee//表示员工数据的类 { public string FirstName; public string LastName; public int Age; public Employee(string firstname, string lastname, int age) { FirstName = firstname; LastName = lastname; Age = age; } } } }
(3)按F5键运行程序,在提示符后依次输入“24”,“15”,运行结果如下所示。
请输入当前员工的年龄(23~25):24 年龄为24的员工是:Janet Leverling 请输入需要查找的数组元素值:15 第2个元素为查找值 查找完成
源程序解读
(1)本示例包含了goto语句的两种用途,第一段代码示例说明goto语句在switch分支控制语句中,用来实现case标签之间的跳转,第二段代码示例说明了在for循环语句中,跳出循环并转而执行指定标签的后续程序代码。
(2)switch语句以当前员工实例的年龄作为判断的条件。当输入不同的年龄值时,switch语句实现分支控制,显示员工的年龄,无论员工的年龄值是多少,最终都要显示员工的姓名。在分支控制语句后跳转到default语句,可以达到这个目的。
(3)在for循环语句中,goto语句能够跳出循环并执行指定标签之后的程序代码。本示例中使用goto语句跳转到“Found”标签时,“Finished”标签中的程序代码也会被执行。使用goto语句跳转到“Finished”标签时,“Found”标签中的程序代码将被忽略,即只执行指定跳转标签之后的程序代码。
4.7 使用if语句
if语句的作用是通过条件判断决定是否执行在该语句后的一句代码或包含在一对“{}”中的代码段。if语句是很常见的程序语句,判断的条件是一个boolean类型的值,或者是结果为boolean数据类型的表达式。
技术要点
本示例主要说明了如何使用if语句将字符串中的数字转为汉字大写,技术要点如下。
● 简单的if语句只包含一个判断条件,当在程序中需要对多个条件进行判断时,应该使用if-else结构的语句。
● if语句之后的执行语句如果只有一句,可以省略“{}”符号对。
● if-else结构允许多种条件的判断,当所有的判断条件都不能满足时,使用else关键字,在该关键字后“{}”符号对中的代码段,将对所有其他情况进行处理。
实现步骤
(1)创建控制台应用程序项目,命名为“IfExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace IfExample { class Program { static void Main(string[] args) { string inputstring = "";//保存输入的字符串 string strResult = "";//转换结果字符串 Console.Write("请输入一个带有数字的字符串:"); inputstring = Console.ReadLine(); for (int i = 0; i < inputstring.Length; i++)//在字符串中进行循环读取字符 { //根据字符串中不同的数字字符,将阿拉伯数字转换为汉字大写数字 if (inputstring[i] == '0') //if-else结构的多个判断条件 { strResult=strResult+'零'; } else if (inputstring[i] == '1')//else if后面是判断条件表达式 { strResult = strResult+ '壹'; } else if (inputstring[i] == '2') { strResult=strResult+'贰'; } else if (inputstring[i] == '3') { strResult=strResult+'叁'; } else if (inputstring[i] == '4') { strResult = strResult + '肆'; } else if (inputstring[i] == '5') { strResult = strResult + '伍'; } else if (inputstring[i] == '6') { strResult = strResult + '陆'; } else if (inputstring[i] == '7') { strResult = strResult + '柒'; } else if (inputstring[i] == '8') { strResult = strResult + '捌'; } else if (inputstring[i] == '9') { strResult = strResult + '玖'; } else//如果不是数字字符,原样复制 { strResult = strResult + inputstring[i]; } } Console.WriteLine("转换后的结果为:"+strResult); Console.ReadLine(); } } }
(3)按F5键运行程序,在程序提示符后,输入“当前工号7981”的字符串,运行结果如下所示。
请输入一个带有数字的字符串:当前工号7981 转换后的结果为:当前工号柒玖捌壹
源程序解读
(1)本示例主要说明if语句的使用方法以及if-else的结构,在示例中首先从字符串中逐个读取字符,然后根据不同的数字转换成相应的金额大写汉字。最后将其他非数字字符原样复制。
(2)在if条件判断语句中,使用的是操作符“==”,该操作符用以比较两个对象是否相等,对于值类型和string类型的变量,判断两者的值是否相等,对于除string之外的引用类型的变量,则判断两者是否指向同一内存空间的位置。类似的运算符还有“!=”、“>”、“>=”、“<”、“<=”等。
4.8 使用switch语句
switch语句的作用是在程序中实现分支控制。在switch语句中的case标签,分别表示不同的判断条件,紧跟在case标签后的程序代码,所执行的是在满足该判断条件下的处理。
技术要点
本示例主要说明了在程序中如何使用switch分支控制语句,对不同的变量值分别执行不同的程序代码,技术要点如下。
● 在switch分支控制语句中,可以包含任意个case标签,每两个case标签的值不能相同。
●在switch分支控制语句中,每个case标签后的代码段的最后一句代码,都必须是跳转语句,例如break语句、goto语句、return语句等。这些跳转语句的作用是防止case标签的代码段被穿透。即使是最后一个case标签,包括default标签,也不能省略跳转语句。
● 当case标签中没有任何执行代码的时候,可以不使用跳转语句,此时case标签将被穿透,程序转向下一个标签进行判断。
实现步骤
(1)创建控制台应用程序项目,命名为“SwitchExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace SwitchExample { class Program { static void Main(string[] args) { //声明一个表示当天日期是星期几的变量 DayOfWeek switchvalue = DateTime.Now.DayOfWeek; //对该变量进行分支控制,根据DayOfWeek不同的枚举值,显示当前日期是星期几 switch (switchvalue) { case DayOfWeek.Sunday: goto default;//使用goto语句跳转到default标签 case DayOfWeek.Monday: Console.Write("今天是星期一。"); break; case DayOfWeek.Tuesday: Console.Write("今天是星期二。"); break; case DayOfWeek.Wednesday: Console.Write("今天是星期三。"); break; case DayOfWeek.Thursday: Console.Write("今天是星期四。"); break; case DayOfWeek.Friday: Console.Write("今天是星期五。"); break; case DayOfWeek.Saturday://当case标签后没有代码时能够穿透到下一个标签 default://周六和周日则显示不是工作日 Console.Write("今天不是工作日。"); break;//最后的default也需要break语句 } Console.ReadLine(); } } }
(3)按F5键运行程序,运行结果如下所示。
今天是星期五。
源程序解读
(1)本示例程序显示当前日期是星期几,如果是周六或周日,则显示不是工作日。示例通过使用switch语句实现该功能。
(2)本示例使用一个DayOfWeek枚举的变量switchvalue用以获取当前日期是星期几。该枚举是.NET Framework中自带的,DateTime.Now是位于System.DateTime命名空间的一个DateTime类实例,表示当前日期和时间,该实例的DayOfWeek属性是一个DayOfWeek枚举。
(3)在对switchvalue变量的switch分支控制语句中,当switchvalue的值为星期天时,使用了goto语句跳转到default标签,执行default标签所包含的程序代码。当switchvalue的值为星期六时,在case标签中不编写任何语句,程序穿透到default标签,执行default标签所包含的代码。
4.9 使用while语句
while语句的作用有两种,一种是重复执行语句之后的代码段,直到判断条件表达式的值为false。另一种是在do语句中提供条件判断的语句。后者在本章“使用do语句”一节中已经介绍了。while语句根据判断条件重复执行一段代码的功能与在do语句中使用不同。在while语句单独使用的时候,先判断条件是否满足,当条件满足时才重复执行代码。而在do语句中是先执行再判断的。while语句本身不提供迭代器,一般通过自行定义迭代器来实现程序中对象的迭代。
技术要点
本示例主要说明了如何单独使用while语句重复执行一段代码,技术要点如下。
● while语句是一种循环语句,根据条件表达式的值判断是否重复执行。
● while语句本身不包含迭代器,该特点区别于for循环语句,而与do语句类似。当需要对while语句中所包含的对象进行迭代时,需要自行定义迭代器。
● while循环语句与do-while结构循环语句的区别在于:while语句先判断再执行,而do-while结构的循环语句先执行再判断。
● 当while语句的条件判断表达式的值总是为true时,为了避免死循环,应在该语句的执行代码段中加入跳转语句,例如break语句、goto语句、return语句等。
实现步骤
(1)创建控制台应用程序项目,命名为“WhileExample”。
(2)打开并编辑Program.cs文件,代码如下所示。
using System; using System.Collections.Generic; using System.Text; namespace WhileExample { class Program { static void Main(string[] args) { Console.WriteLine("按下任意键查看键值……"); ConsoleKey press = 0;//定义一个表示控制台按键的ConsoleKey枚举 while (press != ConsoleKey.Q)//重复执行代码,直到按下“Q”键 { press = Console.ReadKey(true).Key;//获取按键 Console.WriteLine("按下的键值是" + (int)press); } while (true)//判断条件总是true { Console.WriteLine("请选择 0——退出,1——功能1,2——功能2:"); press = Console.ReadKey(true).Key; if (press == ConsoleKey.D0)//按键“0”被按下时跳出循环 break;//必须提供跳转语句结束循环,否则成为死循环,无法结束程序 else if (press == ConsoleKey.D1)//按键“1”被按下时 { Console.WriteLine("选择执行功能1"); } else if (press == ConsoleKey.D2)//按键“2”被按下时 { Console.WriteLine("选择执行功能2"); } } } } }
(3)按F5键运行程序,依次按下“1”,“2”,“Q”,“1”,“2”,“0”键,运行结果如下所示。
按下任意键查看键值…… 按下的键值是49 按下的键值是50 按下的键值是51 按下的键值是81 请选择 0——退出,1——功能1,2——功能2: 选择执行功能1 请选择 0——退出,1——功能1,2——功能2: 选择执行功能2 请选择 0——退出,1——功能1,2——功能2:
源程序解读
(1)本示例的第一个while循环重复读取并显示键盘值,直到“Q”键被按下为止。
(2)本示例的第二个while循环重复读取键盘值,并根据键盘值执行不同的功能,直到按下“0”键,使用break语句跳出循环。
(3)在第二个循环中,while的条件表达式的值直接使用true,如果执行代码段中不包含跳转语句,将成为死循环,这在实际的程序应用中应当避免。