• C++ Primer Plus学习:第六章


    C++入门第六章:分支语句和逻辑运算符

    if语句

    语法:

    if (test-condition)

    statement

    if else语句

    if (test-condition)

    statement1

    else

    statement2

    if else if else语句

    if (test-condition1)

    statement1

    else if (test-condition2)

    statement2

    else

    statement3

    2 逻辑表达式

    逻辑OR运算符:||

    当两个条件中有一个或全部满足某个要求时,为真。

    C++规定,||运算符是个顺序点(逗号和冒号也是),因此不需要在这些表达式中使用括号。

    逻辑AND运算符:&&

    将两个表达式合成一个表达式,仅当原来的两个表达式都为true时,才为true

    逻辑NOT运算符:!

    将后面表达式的值取反。

    短路特性:

    &&中,若第一个表达式为false,则结果为false,程序不会再去判断第二个表达式的值。

    ||中,若第一个表达式的值为true,则结果为true,程序不会再去判断第二个表达式的值。

    3 字符函数库:cctype

    C++C语言继承了一个非常强大的函数软件包。可确定字符是否为大写字母、数字、标点符号等等。

    这些函数的返回值为为int型。

    如下表:

    函数名称

    返回值

    isalnum() 

    是字母或数字,true

    isalpha()

    是字母,true

    iscntrl() 

    是控制字符,true

    isdigit() 

    是数字(0-9,true

    isgraph() 

    是除空格之外的打印字符,true

    islower()

    是小写字母,true

    isprint()

    是打印字符(含空格),true

    ispunct()

    是标点符号,true

    isspace()

    是标准空白字符(空格、进纸、换行、回车、水平/垂直制表符),true

    isupper()

    是大写字母,true

    isxdigit()

    是十六进制(0-9a-f,A-F),true

    tolower()

    是大写字母,返回小写

    toupper()

    是小写字母,返回大写

    4 ?:运算符

    C++中有一个常被用来替代if else语句的运算符,也是C++中唯一一个三个操作数的运算符(三目运算符)。如下:

    expression1? expression2: expression3

    expression1true,取expression2,否则取expression3

    switch语句

    switch (integer-expression)

    {

    case label:statements (s)

    case labe2:statements (s)

    ……….

    case laben:statements (s)

    default : statements(s)

    }

    switch就像指路牌,告诉计算机接下来该执行哪一些代码。执行到swtich时,程序将跳到integer-expression的那一行。integer-expression必须是一个整数型的表达式,标签也必须是一个整数表达式。最常见的是intchar和枚举类型。若成程序不与任何表达式匹配,则执行defaultdefault是可选的。

    注意,在C++中,case标签仅是标签,程序跳到相应的标签后将依次执行后面所有的语句,除非有明确的指示。

    将枚举量作为标签

    cin通常无法识别枚举量(不知道程序员如何定义它们),在int型和枚举量进行比较时,将枚举量自动提升为int型。在while循环测试条件中也是如此。

    6 break和continue

    break用于任何循环或者switch语句中,跳到循环或者switch语句后面执行,即跳出循环或者switch语句。

    continue语句用于循环中,可让程序跳过循环体中余下的代码,并开始行一轮的循环。

    continue语句使程序直接跳到循环的更新表达式。

    7 读取数字的循环

    在将一系列数字输入到数组中的程序,如:

    int n;cin>>n;

    如果输入非数字时,将发生4种情况:

    1. n的值保持不变
    2. 不匹配的输入将留在输入队列中
    3. cin对象中的一个错误标记被设置
    4. cin方法的调用将返回false(如果被转化为bool型)

    可使用cin输入表达式的值来检测输入的是否为数字。程序如果发现用户输入错误内容时,应采取3个步骤:

    1. 重置cin以接受新的输入
    2. 删除错误输入
    3. 提示用户再输入

    示例(核心代码):

    while(!(cin>>golf[i]))

    {

    cin.clear();

    while(cin.get()!=' ') //读取此行结尾之前所有的字符,达到删除的效果

    {

    continue;

    cout<<"Please enter a number:";

    }

    }

    8 简单文件输入/输出

    C++将读取键盘输入和在屏幕上输出(统称为控制台输入/输出)的技巧用于文件输入/输出(文件I/O)非常简单。

    文本I/O和文本文件

    文本I/O:使用cin进行输入时,程序将输入视为一系列的字节,每个字节均被解释为字符编码。不管目标数据类型是什么,输入一开始都是字符数据:文本数据。然后,cin对象负责将这些文本转化为其他类型。

    现举例说明:

    示例输入:38.5 19.2

    char类型:

    char ch;cin>>ch;

    输入行的第一个字符给ch,系统将3的字符编码(二进制)存储在变量ch中。

    int类型:

    int n;cin>>n;

    程序将不断读取,知道遇到非数字字符。此处为38cin通过计算得到38的字符编码并存入变量n中。

    double型:

    double x;cin>>x;

    不断读取(数字、一个句点)直到不属于浮点数的字符。

    char数组型:

    char word[20];cin>>word;

    cin不断读取,直到遇到空白字符。

    本章讨论的文件I/O相当于控制台I/O,因此仅适用于文本文件。

    写入到文本文件

    cout用于控制台输出的基本事实:

    • 包含头文件iostream
    • 头文件iostream定义了用于输出的ostream类,声明了名为coutostream变量(对象)。
    • 必须指明名称空间std,使用编译命令using或前缀std::

    文件输出与此相类似:

    • 包含头文件fstream
    • 头文件iostream定义了用于输出的ofstream类,声明一个或多个ofstream变量(对象),以自己喜欢的方式命名。
    • 必须指明名称空间std,使用编译命令using或前缀std::
    • 使用完文件后,使用方法close()将其关闭。
    • 可结合使用ofstream对象和运算符<<来输出各种类型的数据。

    声明/定义ofstream对象并与特定的文件关联。

    ofstream outfile;

    outfile.open("f.txt");

    char name[20];

    cin>>name;

    outfile.open(name);

    使用对象:

    double wt=10.1;

    outfile<<wt;

    char c[20]="Hello World!";

    outfile<<c;

    文件的关闭:outfile.close();

    总结,文件输出的步骤:

    1. 包含头文件fstream
    2. 创建一个ofstream对象
    3. 将该ofstrream对象同一个文件关联起来
    4. 就像使用cout那样使用ofstream对象。

    方法close()不需要文件名作为参数。

    outfile可使用cout的各种方法,运算符<<除外。

    若使用open()方法打开的文件不存在,则会新建一个。默认情况下,程序会截断该文件,如果文件中有内容,则会被清空。

    读取文本文件

    文本输入是基于控制台输入的,控制台输入涉及多个方面,以下为总结:

    • 包含头文件iostream
    • 头文件定义了一个用于输入的istream类,声明了一个名为cinistream对象,
    • 必须指明名称空间,如使用cin就必须使用using编译命令或者std::
    • 可以使用cin和运算符>>来读取各种类型的数据。
    • 可以使用cinget()方法来读取一个字符,使用getline()方法来读取一行字符。
    • 结合使用cineof()fail()方法来判断输入是否成功。
    • 对象cin本身作为测试条件时,如果最后一个读取操作成功,返回true,否则,false

    文件输入与此极其类似:

    • 包含头文件fstream
    • 头文件定义了一个用于输入的ifstream类,需要声明一个或多个ifstream对象,并以自己喜欢的方式命名。
    • 必须指明名称空间,如使用using编译命令或者std::
    • 需要将文件与ifstream对象关联起来。方法之一是使用open()方法。使用完文件后,使用close()方法关闭。
    • 可以使用ifstream对象和运算符>>来读取各种类型的数据。
    • 可以使用ifstream对象的get()方法来读取一个字符,使用getline()方法来读取一行字符。
    • 结合使用ifstreameof()fail()方法来判断输入是否成功。
    • ifstream对象本身作为测试条件时,如果最后一个读取操作成功,返回true,否则,false

    必须声明自己的ifstream对象并为其命名,并和文件关联起来。

    例:

    ifstream fin;

    fin.open("a.txt");

    char name[20];

    cin>>name;

    fin.open(name);

    声明了一个ifstream对象并将其同文件关联起来后,就可是像cin那样使用它。

    如果打开一个不存在的文件用于输入,将产生错误。可使用is_open()方法打开。可使用以下代码检查:

    fin.open("a.txt");

    if (!fin>is_open())

    {

    exit(EXIT_FAILURE);

    }

    函数exit()的原型在头文件cstdlib中定义。EXIT_FAILURE为一个定义的用于和操作系统进行通信的参数,函数exit()终止程序。

    如果老的编译系统没有is_open(),可使用good()进行判断。

    程序必须能够找到该文件。通常,除非在输入的文件名中包含路径,否则程序在可执行文件的文件夹中查找。

    注意,eof()能够判断能否到达文件尾,fail()如果遇到数据类型不匹配的话,返回false

  • 相关阅读:
    SSM框架学习--Mybatis(一)入门
    Oracle 分页查询与数据去重
    JDBC基础
    Oracle 连接查询
    Java反射
    Oracle数据库常用SQL函数
    Oracle 中的SELECT 关键字(查询、检索)
    Python 短路机制
    Python 字符集
    SQL-MySQL
  • 原文地址:https://www.cnblogs.com/xyb930826/p/5267015.html
Copyright © 2020-2023  润新知