switch 语句
switch语句更容易从大型列表中选择。
switch (inter-expression)
{
case label1: statements;
break;
case label2: statements;
break;
case label3: statements;
break;
default :statements;
}
执行switch语句,程序将跳到使用inter-expression的值标记(label)的那一行。case标签只是行标签,而不是选项之间的界线。需要用break语句跳出switch语句。如果没有break语句,将执行下一个case行,直到遇到break或结束。
将枚举量用作行标签:
switch语句将int值和枚举量标签进行比较时,将枚举量提升为int。
switch语句与if else语句都允许程序在选项中选择,但if else更通用,它可以处理取值范围。
break和continue语句
continue用于循环体中,让程序跳过循环体中的余下代码开始新一轮的循环。
break直接跳过循环,执行下一个语句。
与C语言一样,C++也有goto语句。下面的语句将跳到使用paris:作为标签的位置。
goto paris;
paris:statement;
在大多数情况下,使用goto语句不好,应使用结构化控制语句来控制语句的流程。
读取数字的循环
在读取数字时,如果发现类型不匹配,会发生下列四种情况:
- 读取的值保持不变
- 不匹配的输入将被留在输入队列中
- cin对象中的一个错误标记被设置;
- 对cin的调用会报错
错误标记意味着必须重置标记,才能继续读取输入。clear()重置错误标记,也重置文件尾。
当程序发现用户输入错误时,应采取3个步骤:
- 重置cin以接受新的输入
- 删除错误输入
- 提醒用户再输入
例:
while (!cin>>golf[i])//发生读取错误
{
cin.clear ();//清除错误标记
while (cin.get()!='\n')
continue; //删除错误输入
cout<<"Please enter a number:"//提醒再输入
}
简单文件输入输出
使用文件输出(写入文本文件)的主要步骤:
- 包含头文件fstream包含名称空间std
- 创建一个ofstream对象 :ofstream outFile;
- 将该ofstream对象同一个文件关联起来 :outFile.open("carinfo.txt");//使用完之后,需要关闭 outFile.close();
- 就像使用cout那样使用该ofstream对象
文件输入(读取文本文件)与上述类似:
- 包含头文件fstream包含名称空间std
- 创建一个ifstream对象 :ifstream inFile;
- 将该ifstream对象同一个文件关联起来 :inFile.open("carinfo.txt");//使用完之后,需要关闭 inFile.close();
- 就像使用cin那样使用该ifstream对象
需要检查文件是否打开成功:
C++11
inFile.open("txt");
if (!inFile.is_open())
{
exit (EXIT_FAILURE);
}
//老版本
inFile >> value; //读取第一个值
while (inFile.good()) //当值不报错
{
inFile >> value;//读取下一个值
}