一、do while语句
do while 语句和while 语句非常相似,唯一的区别是,do while 语句先执行循环体后检查条件。do while 语句应该在括号包围起来的条件后面用一个分号表示语句结束。
do
statement
while (condition);
二、练习题目
(1)编写一段程序,使用do while循环重复地执行下述任务:首先提示用户输入两个string对象,然后挑出较短的那个并输出它。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
do
{
string My_string1, My_string2;
cout << "请输入两个字符串" << endl;
cin >> My_string1 >> My_string2;
if (My_string1.size() > My_string2.size())
{
cout << My_string2 << endl;
}
else
{
cout << My_string1 << endl;
}
} while (cin);
}
三、跳转语句
C++语言中提供了4中跳转语句:break、continue、goto、和 return 语句
(1)break语句负责终止离它最近的while、do while、for、或者 switch 语句,并从这些语句之后的第一条语句开始执行。break语句只能出现在迭代语句或者switch语句内部。break语句的作用仅限于最近的循环或者switch。
(1)练习答案
编写一段程序,从标准输入中读取string对象的序列直到出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次时使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有任何单词是连续出现的。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string My_string1, My_string2;//此时需要将这两个变量定义出来!!!
do
{
cout << "请输入字符串" << endl;
cin >> My_string1;
if (My_string1 == My_string2)//出现连续相同的情况,则输出,退出循环
{
cout << "没有任何单词是重复的" << endl;
break;
}
else
My_string2 = My_string1;
} while (cin);
}
(2)修改上面的程序,使其找到的重复单词必须大写字母开头。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string My_string1, My_string2;
int flag = 0;//记录是否有重复单词出现
cout << "请输入单词:";
while (cin >> My_string1)
{
if (My_string1[0] > 'Z' || My_string1[0] < 'A')
{
My_string2 = My_string1;
cout << "请继续输入单词:";
continue;
}
if (My_string1 == My_string2)
{
cout << "重复单词为:" << My_string1 << endl;
flag = 1;
break;
}
else
My_string2 = My_string1;
cout << "请继续输入单词:";
}
if (flag == 0)
{
cout << "无重复单词出现" << endl;
}
system("pause");
}
(3) 知识点1:异常——指运行时程序的反常行为,典型的有:失去数据库连接、遇到意外的输入等。
知识点2:异常处理—— 在异常被检测出以后,进行异常的处理,主要分为三种:throw表达式、try语句快和异常类
throw表达式:异常检测部分使用throw表达式来表示它遇到的无法处理的问题。
try语句块:处理异常,以关键字try开始,以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被catch子句处理。被称为异常处理代码。
异常类:用于在throw和相关的catch子句之间进行异常信息的传递。
(4)编写一段程序,从标准输入读取两个整数,输出第一个数除以第二个数的结果。
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>//标准异常库
using namespace std;
int main()
{
int a, b;
cout << "请输入相除的两个整数:";
while (cin >> a >> b)
{
try
{
if (b == 0) throw std::runtime_error("被除数不能为0");//runtime_error异常类:只有在运行时才能检测出的问题
cout << static_cast<double>(a) / b << endl;//考虑到不可以整除产生小数的情况,先将a强制转化为double类型
}
catch (runtime_error err)//err是runtime_error类的一个实例
{
cout << err.what(); //实例的成员函数,返回内容由编译其决定
cout << "\n是否需要重新输入? Enter y or n:" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;//break只能用在开关体或者循环体中
}//简单来说try是检测异常的,如果产生了异常,就throw(抛出)一个异常,然后被catch到,进行异常的处理
//如果没有catch部分,仅有try,仍然会报错
}
}