分支语句和逻辑运算符
2020-02-24 10:38:15 6 举报
AI智能生成
C++ plus
作者其他创作
大纲/内容
switch 语句
格式
子主题
switch (integer-expression)
{
case lable1 :statement(s)
case lable2 :statement(s)
....
default :statenment(s)
}
说明
integer-expression 必须是一个结果为整数的表达式,可以是字母
label 必须是整数常量表达式 ,int /char 常量(1,‘q’),也可以是
枚举量
枚举量
int choice;
cin >> choice
while (choice != 5)
{
switch(choice)
{
case 1:
case 2:
default:
}
cin >> choice
}
cin >> choice
while (choice != 5)
{
switch(choice)
{
case 1:
case 2:
default:
}
cin >> choice
}
如果输入的是字符,会有死循环。//why?
最好用字母输入
//不理解什么时候可以字符,什么时候可以字母??
字符可以和数字比较吗??字符可以与 数字比较
cin.get(n);
最好用字母输入
//不理解什么时候可以字符,什么时候可以字母??
字符可以和数字比较吗??字符可以与 数字比较
int n;
cin>>n;
cin>>n;
cout<<n; // 输入字母 ,输出0
n=cin.get();
cout<<n;//输入字母,输出字母的ascaii 码
cin.get(n);
cout<<n; // 错误,cin.get(n),n不能是int 必须是char
运行
语句后如果没有break,会继续执行后面的语句
枚举量作标签
原理
switch语句将 int 值和 枚举值比较时,将枚举值提升为int值
char 与 int 比较时也是这样吧。
应用代码
代码
子主题
说明
如果要自己引入用顺序的表格,可以用enum 的方法
if else switch选择
涉及取值范围、浮点测试、或两个变量比较——if else
所有选项都可以用整数常量标识。如果选项超过2个时,switch效率更高。
即可以使用if else if 语句,也可以使用switch 语句,当选项不少于3个时,使用switch 语句
即可以使用if else if 语句,也可以使用switch 语句,当选项不少于3个时,使用switch 语句
break 、 continue语句
break
应用
循环结构,switch 语句
作用
使程序跳到 switch 或 循环后面的语句处执行
continue
应用
循环结构
作用
跳过循环体余下的代码,开始新一轮循环
注意
在 for 循环中,continue 不会跳过更新表达式
goto
作用
goto pairs;跳到 使用pair作为标签的位置。
char ch;
cin >> ch;
if (ch== 'p')
goto pairs;
cout<< ...
....
paris: cout << "YOU ..."
char ch;
cin >> ch;
if (ch== 'p')
goto pairs;
cout<< ...
....
paris: cout << "YOU ..."
注意
少用,应该使用结构化控制语句来控制程序流程
读取数字的循环
数组
作用
将一系列数字读入到数组中,且允许未填满结束
方法
用cin>>n,可以用非数字输入结束数字循环.
while (i<MAX && cin>>fish[i])
while (i<MAX && cin>>fish[i])
说明
int n ;
cin >> n;
输入的是单词,结果:
1 n 的值保持不变。//???
2. 不匹配的输入留在输入队列中
3.cin 对象中的一个错误标记被设置
4.对cin 方法的调用返回false (如果被转换为bool 类型)
cin >> n;
输入的是单词,结果:
1 n 的值保持不变。//???
2. 不匹配的输入留在输入队列中
3.cin 对象中的一个错误标记被设置
4.对cin 方法的调用返回false (如果被转换为bool 类型)
cin 在测试条件中,返回bool值
非数字输入设置错误标记要必须重置该标记。用 cin.clear()重置错误输入标记,同时也
重置文件尾(EOF).
重置文件尾(EOF).
clear 清除流的错误状态,使cin 能够输入。如果下面要输入其它 ,要吸收字母 用 cin.get()
有些系统中,要让窗口打开,可以添加额外的代码。
//下列代码按q结束输入
if ( !cin )
{
cin.clear( );
cin.get( ); //read q
}
cin.get(); //read end of line after last input
cin.get();
//下列代码按q结束输入
if ( !cin )
{
cin.clear( );
cin.get( ); //read q
}
cin.get(); //read end of line after last input
cin.get();
拒绝非数字输入
作用
若用户输入了非数字,提醒重新输入
步骤
1.重置cin接受新输入
2.删除错误输入
3.提醒用户重新输入
代码
while ( ! ( cin >> golf[i]) )
{
cin.get();
while ( cin.get() != '\n')
continue;
cout<<"please enter a number!";
}
{
cin.get();
while ( cin.get() != '\n')
continue;
cout<<"please enter a number!";
}
注,就算 while里面条件不符合,也会执行cin >> golf[i]
简单文件输入/输出
文本I/O和文本文件
cin输入原理
原理
程序将输入视为一系列的字节,每个字节都被解释为字符编码。
不管什么目标数据类型,输入都是字符数据——文本数据。
cin对象负责将文本转换为其它类型。
不管什么目标数据类型,输入都是字符数据——文本数据。
cin对象负责将文本转换为其它类型。
例子
书p190
cout 输出原理
原理
与cin 相反,数据类型转换成字符类型输出
注意
本章讨论的I/O相当于控制台I/O ,仅适用于文本文件(txt??)
写入到文本文件中
前提条件
头文件 fstream
头文件fstream 定义了一个用于输出的ofstream类
需要声明一个或多个 ofstream 变量(对象),并命名
指明名称空间std
ofstream 在std中,其它不用
将ofstream 对象与文件关联起来。用open()方法
使用文件后,用close()
结合使用ofstream 对象和运算符<< 来输出各种类型数据
文件输出步骤
包含头文件 fstream
创建一个ofstream 对象
将该ofstream 对象和文件关联起来
像使用cout 一样使用 对象
关闭文件!!不要漏了
声明
ofstream outFile;
ofstream fout;
ofstream fout;
关联文件
法一
outFile.open("fish.text")
法二
(自己输入)
(自己输入)
char filename[50];
cin>>filename;
fout.open(filename);
cin>>filename;
fout.open(filename);
说明
若文件不存在,会自己创建
文件已存在,首先截断该文件,将长度截到0——丢弃原有的内容
写入
double wt = 125.8;
outFile<<wt;
outFile<<wt;
char line[80] ="Objects are closer than they appear."
fout<<line<<endl;
fout<<line<<endl;
说明
可以像cout( 如 << , endl, setf() )那样使用 ofstream对象,
可使用cout的任何方法
可使用cout的任何方法
cout.setf(ios_base::showpoint)--在数字前显示价钱符号$
可以 outFile.setf(ios_base::showpoint)
可以 outFile.setf(ios_base::showpoint)
cout.precision(2);显示后两个小数点。
outFile.precision(2);
outFile.precision(2);
关闭文件
outFile.close( );
读取文本文件
前提条件
头文件fstream
头文件fstream 定义了一个用于处理输入的ifstream 类
声明ifstream变量(对象)
名称空间std
ifstream需要
对象与文件关联。open()
close()关闭
ifstream 对象和运算符 >> 读取各类型的数据
ifstream 对象和get()来读取一个字符,用 ifstream 对象和 getline()读取一行字符
结合使用ifstream 和 eof() fail() 判断输入是否成功
ifstream 被当测试条件时,最后一个读取操作成功,转换为Bool的true
声明
ifstream inFile;
ifstream fin;
ifstream fin;
文件关联
inFile.open("bowling.txt")
char filename[50];
cin>>filename;
fin.open(filename);
cin>>filename;
fin.open(filename);
检查文件是否打开成功
打开失败
后果: 后面的输入失败
方法is_open()
使用
inFile.is_open()
返回值
打开成功 true
打开失败 false
代码
inFile.open("bowling.txt");
if( !inFile.is_open())
{
exit(EXIT_FAILURE);
}
if( !inFile.is_open())
{
exit(EXIT_FAILURE);
}
说明
exit()在 cstdlib中,EXIT_FAILURE参数值???相当于0??。
is_open()是C++较新的内容,编译器不支持,
可以使用 good()替代。//一样的吗??
可以使用 good()替代。//一样的吗??
读取操作
double wt;
inFile>>wt;
inFile>>wt;
char line[81];
fin.getline(line,81);
fin.getline(line,81);
说明
像cin一样使用,cin任何方法可用于ifstream 对象
读取时问题
是否到尾部
inFile.eof()
返回值
结尾:1
非结尾:0
非结尾:0
代码
if (inFile.eof() )
类型不匹配
inFile.fail()
返回值
不匹配: true
匹配: false
匹配: false
意外问题
(文件受损,
硬件故障。)
(文件受损,
硬件故障。)
inFile.bad()
返回值
有问题:true
无:false
无:false
(总)检查读取是否成功
方法
inFile.good()
作用
没有发生任何问题时候,返回true
返回值
成功: true
失败: false
失败: false
代码
int value;
inFile >> value;
while ( inFile.good() )
{
....
inFile >> value;
}
inFile >> value;
while ( inFile.good() )
{
....
inFile >> value;
}
关闭文件
inFile.close()
代码
子主题
说明
while ( inFile.good) 要循环输入值,可用
while ( inFile >> value )替代
while ( inFile >> value )替代
其他
文本文件每行以回车字符和换行符结尾,读取文件时转换成换行符
if 语句
if else 格式可以是
if () {
}
else {
}
}
else {
}
条件运算符和错误防范
现象
if (a==C),写成了 if (a=C ),程序执行赋值操作,且不会报错
方法
variable == value 代替 value == variable
若出现 3 == x 这种情况,编译系统会报错
逻辑表达式
内容
|| && !
|| 运算符
概念
是个顺序点,先执行左,再执行右,左为true 不执行右
&& 运算符
概念
顺序点,左为false 不执行右
应用
取值范围
注意
if (17 < age < 35),编译器不会觉得是错误,(17 < age) < 35
! 运算符
细节
! 运算符的优先级高于所有的关系运算符和算术运算符
逻辑and 运算符高于 逻辑or
age > 50 || weight > 300 && donation > 1000,
=
age > 50 || ( weight > 300 && donation > 1000 ),
=
age > 50 || ( weight > 300 && donation > 1000 ),
最好用括号括起,就算不要括号也正确
另一种表示方式
&& —— and
|| —— or
! —— not
|| —— or
! —— not
说明
不能将它们用作变量名,也不是关键字
//关键字是什么??
//关键字是什么??
c++中不需要头文件,c 中需要头文件 iso646.h
字符函数库
头文件
ctype.h \ cctype
函数
isalpha()
作用
判断字符是否为字幕
格式
isalpha(ch)
返回值
字母
非0值
不是字母
0
对比
if ( (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'z' ) )
对 ascii码成立,其它不一定
if (isalpha (ch) )
ispunct()
作用
判断字符是否为标点符号
格式
ispunct(ch);
返回值
标点
true
但是这些返回值类型为int ,不是bool ,
通常bool 转换 可以将它们视为 bool//????
通常bool 转换 可以将它们视为 bool//????
不是标点
false
?: 运算符
作用
可以代替 if else ,更加简洁
作隐藏代码
cout << ( (i<2)? !i ? x[i] : y : x[1])
说明
对于可读性 ,还是 if else 好点
格式
结果
是表达式,生成的是一个值 ,所以可以 c= a > b ? a : b
0 条评论
下一页