美文网首页
[进阶]C++:语句

[进阶]C++:语句

作者: 离群土拨鼠 | 来源:发表于2019-03-23 16:30 被阅读0次

常见的语句for,if,else,while都熟了。写一些用的不熟的。

switch语句

  • switch有很多的标签,如果表达式和某个case标签的值匹配,程序从该标签的第一条语句开始执行,直到达到了switch的结尾或者遇到一条break;
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    unsigned aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;
    char ch;
    while (cin >> ch)
    {
        switch (ch)
        {
        case 'a':
            ++aCnt;
            break;
        case 'e':
            ++eCnt;
            break;
        case 'i':
            ++iCnt;
            break;
        case 'o':
            ++oCnt;
            break;
        case 'u':
            ++uCnt;
            break;
        default:
            break;
        }
    }
    system("pause");
    return 0;
}
  • 然而,有一些默认的switch行为才是程序真正需要的。当几个case串在一起时无论那个都执行相同的代码。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    unsigned aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;
    char ch;
    while (cin >> ch)
    {
        switch (ch)
        {
            case 'a':   
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                ++uCnt;
                break;
        
        }
    }
    system("pause");
    return 0;
}
  • default标签

如果没有一个case标签能和switch匹配,程序将执行紧跟在default标签后面的语句。

范围for语句

  • 形式如下:

for (declaration:expression)
statement

  • 循环变量必须声明为引用类型
vector<int> v={0,1,2,3,4,5,6,7,8,9};
for(auto &r:v)
    r*=2;

你会发现引用不是只能绑定一次吗,为什么可以便利所用呢?其实是下面的等价。

for (auto beg = v.begin(), end = v.end(); beg != end; ++beg)
    {
        auto &r = *beg;
        r *= 2;
    }

continue语句

  • continue语句只能出现在for\while\do while循环内部
  • 仅作用于离他最近的循环,continue语句中断当前循环但是仍然继续执行循环
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string buf;
    while (std::cin >> buf && !buf.empty())
    {
        if (buf[0] != '_')
        {
            continue;//接着读入下一个输入
        }
        std::cout << "Hello World!\n";//程序执行到了这里说明输入的是以下划线开始的
    }
   
    

}

goto语句

  • 作用是从goto 语句无条件跳转到同意函数内的另一条语句

goto语句的语法形式

goto label;
其中,label是用于标识一条语句的标识符:end : return;

try语句块和异常处理

  • 异常处理是指存在于运行时的反常行为。例如,如果程序的问题是输入无效,这一场处理部分可能会要求用户重新输入人正确的数据;如果丢失了数据库链接会发出警报信息。包括:
  • throw表达式
  • try语句块:以一个和多个catch子句结束。
  • 异常类(exception) 用于在throw表达式和相关的catch子句之间传递异常的具体信息。
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string buf;
    int a = 0;
begin:
    a = 10;
    while (std::cin >> buf && !buf.empty())
    {
        std::cout << a++ << endl;
        try
        {
            if (buf[0] != '_')
            {
                continue;//接着读入下一个输入
            }
            if (buf[0] != 'A')
            {
                throw runtime_error("A is not number!");
            }

    
        }
        catch (runtime_error err)
        {
            std::cout << err.what()
                << "Agaiin? y or n" << endl;
            char c;
            cin >> c;
            if (!cin || c == 'n')
                break;
            else
            {
                goto begin;
            }
        }
        
    }
   
    

}

参考:C++primer 第五版

相关文章

  • [进阶]C++:语句

    常见的语句for,if,else,while都熟了。写一些用的不熟的。 switch语句 switch有很多的标签...

  • (第五章)语句(Statement)

    本章介绍几种典型的C++语句,分别是: 空语句 条件语句(if、switch) 迭代语句(while、do-whi...

  • Coursera C++ Part B [Week1] C++进

    C++ Part B是C++进阶课程,bf课程网址 https://www.coursera.org/learn/...

  • C++循环与决策

    Tags:C++,《C++ Primer Plus》笔记 一、循环## 语法### C++中有三种循环语句,语法与...

  • 第二章 开始学习c++(2)C++语句

    (二)c++语句 1.c++由语句构成 c++是一组组函数和数据构成的,而函数和数据形式上又是由语句来写出的,可...

  • 2019-11-09 判断(if)语句

    判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活...

  • 10 判断(if)语句

    判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 程序...

  • FFmpeg - 打造一款万能的音乐播放器

    从 c/c++ 基础、jni 基础、c/c++ 进阶、数据结构和算法、linux 内核、CMake 语法、Shel...

  • c++基础之语句

    上一次总结了一下c++中表达式的相关内容,这篇博文主要总结语句的基础内容 简单语句 c++ 中语句主要是以分号作为...

  • ★05.语句

    条件语句 if语句 switch语句 与 C/C++ 的区别,case后面可以跟随任何表达式。 匹配操作用的是==...

网友评论

      本文标题:[进阶]C++:语句

      本文链接:https://www.haomeiwen.com/subject/rbesvqtx.html