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-9,a-f,A-F),true

tolower()

是大写字母,返回小写

toupper()

是小写字母,返回大写

4 ?:运算符

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

expression1? expression2: expression3

expression1为true,取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必须是一个整数型的表达式,标签也必须是一个整数表达式。最常见的是int、char和枚举类型。若成程序不与任何表达式匹配,则执行default,default是可选的。

注意,在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()!='\n') //读取此行结尾之前所有的字符,达到删除的效果

{

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;

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

double型:

double x;cin>>x;

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

char数组型:

char word[20];cin>>word;

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

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

写入到文本文件

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

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

文件输入与此极其类似:

  • 包含头文件fstream
  • 头文件定义了一个用于输入的ifstream类,需要声明一个或多个ifstream对象,并以自己喜欢的方式命名。
  • 必须指明名称空间,如使用using编译命令或者std::
  • 需要将文件与ifstream对象关联起来。方法之一是使用open()方法。使用完文件后,使用close()方法关闭。
  • 可以使用ifstream对象和运算符>>来读取各种类型的数据。
  • 可以使用ifstream对象的get()方法来读取一个字符,使用getline()方法来读取一行字符。
  • 结合使用ifstream的eof()和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。

C++ Primer Plus学习:第六章的更多相关文章

  1. 201671010140. 2016-2017-2 《Java程序设计》java学习第六章

    java学习第六章    本周对与java中的接口,lambda表达式与内部类进行了学习,以下是我在学习中的一些体会:    1.接口: <1>.接口中的所有常量必须是public sta ...

  2. 【转载】Gradle学习 第六章:构建脚本基础

    转载地址:http://ask.android-studio.org/?/article/11 6.1. Projects and tasks 项目和任务Everything in Gradle si ...

  3. Java基础知识二次学习--第六章 常用类

    第六章 常用类   时间:2017年4月26日16:14:49~2017年4月26日16:56:02 章节:06章_01节~06章_06节 视频长度:20:57+1:15+8:44+1:26+11:2 ...

  4. C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换

    第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...

  5. 【C++】《C++ Primer 》第十六章

    第十六章 模板与泛型编程 面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况. OOP能处理类型在程序允许之前都未知的情况. 泛型编程在编译时就可以获知类型. 一.定义模板 模板:模板是泛型编 ...

  6. 深度学习框架PyTorch一书的学习-第六章-实战指南

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter6-实战指南 希望大家直接到上面的网址去查看代码,下面是本人的笔记 将上面地 ...

  7. C++ Primer Plus学习:第二章

    C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...

  8. Intel汇编语言程序设计学习-第六章 条件处理-上

    条件处理 本章要点 1.简介 2.布尔和比较指令 3.条件跳转 4.条件循环指令 5.条件结构 6.应用:有限状态机 7.决策伪指令 6.1  简介 本章,读者将看到高级条件分支如何翻译成底层的实现代 ...

  9. C语言学习第六章

    今天开始尝试改变! 今天要学习函数,一个C语言中的重要组成部分. 首先先聊聊为什么要使用函数?随着学习的深入很多人会发现某段的代码重复使用的几率很大,而如果用一次写一次的话很明显的效率就会比较低,如果 ...

  10. Artech的MVC4框架学习——第六章Model的验证

    第一Model验证旨在为通过Model绑定生成参数进行检验以确保用户输入数据的有效性(p318) 第二Model验证分两种:服务器端(三种解决方案 p256)和客户端(ajax\jQuery) 第三服 ...

随机推荐

  1. mysql 基本的操作数据库命令

    注意:命令操作都是分号结尾 1 .连接mysql: mysql -u  用户名   -p 密码 2.展示所有数据库: show  databases; 3.进入数据库: use   数据库名字; 4. ...

  2. 读耗子叔的《从Equifax信息泄露看数据安全》

    本文永久地址:https://www.cnblogs.com/erbiao/p/9214219.html 最近正好看到耗子叔<从Equifax信息泄露看数据安全>这篇文章,就来说一下这篇文 ...

  3. Typescript函数

    编程都是需要函数的,因为有了函数就能复用很多东西了.不仅仅能够复用代码,还能保持代码的简洁性和提高编程的逻辑性. 在原生的JavaScript中,函数的定义有三种, function foo() {} ...

  4. mybatsi中文乱码问题

    乱码问题:待总结,这里先贴出网友的博客: http://blog.csdn.net/zht666/article/details/8955952

  5. 20155207实验2 Windows口令破解

    20155207实验2 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和 ...

  6. 20155216 2016-2017-2 《Java程序设计》第二周学习总结

    教材学习内容总结 类型 short占2字节 int占4字节 long占8字节 byte占1字节,可表示-128~127的整数 char占2字节 boolean不考虑占字节 float占4字节 doub ...

  7. 20155339 2016-2017-2 《Java程序设计》第4周学习总结

    20155339 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承.多态与is-a 继承就是避免多个类间重复定义共同行为. 可以把相同的成粗代码提升为父类 ...

  8. gdb调试带参数程序

    一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > ...

  9. hadoop2.0(chd4) 通过API获取job信息

    hadoop 版本儿:hadoop-2.0-cdh4.3.0 想做一个hive的命令的schedule,所以必须获取正在运行的job的数量. 到网上查了一通,一开始用了JobClient,怎么弄都是N ...

  10. 搜索引擎ElasticSearch系列(三): ElasticSearch2.4.4 bigdesk插件安装

    一:ElasticSearch bigdesk插件简介 bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况, ...