加快进度:(
for循环
for循环是入口条件循环,在判断条件时会强制转换成bool类型。
C++将赋值表达式的值定义为左侧成员的值 因此 x=20;的值为20。
cout<<(x>3)<<endl 输出的是1
cout.setf(ios::boolalpha)函数调用设置一个标记 该标记命令cout显示true和false 而不是
C++表达式是值活值与运算符的组合,每个C++表达式都有值。
i=1; //i++的值还是1但是i=2 而++i的值为2且i=2.
p为指针 *++p等于*(++p)++*p则先取值后加一。
++优先级比*高
组合赋值运算符......
逗号确保先计算第一个表达式,然后计算第二个表达式,C++规定,逗号表达式的值是第二部分的值。
关系运算符可以用于string类对象。string对象不使用空字符来标记字符串末尾
c中判断字符串是否相等strcmp
while循环
先判断后执行 可以和for循环相互转化。
延时循环 clock()和头文件ctime
do while循环 出口循环
基于范围的for循环
例如
double price[5]={4.9,4.6,0,0,0};
for(double x:price)
cout<<x<<std::endl;
这样可以输出price所有的值会全部取一次 如果要更改x的数值则需要用&x代替x(条件位置的x)。
还可以结合使用基于范围的for循环和初始化列表:
for(int x:{3,5,2,8,6})
cout<<x<<" ";
cout<<"\n";
循环和文本输入
读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。发送给cin的输入将被缓冲 按下回车后,整个字符序列才会被发送给程序。
在第四章我们知道面向行输入有getline和get两类
而cin.get()可以用于读取一个字符 那么cin.get(ch)同样就可以读取一个字符 从而更改掉上文cin的缺点。
c++支持被称为函数重载的oop特性。函数重载允许创建多个同名函数,条件是他们的参数列表不同。所以面向行读取使用cin.get(ch,20)和cin.get(ch)(第一个ch是char类型数组第二个为char)为两个不同的函数。
在了解上文之后 对于循环输入输出是否可以选择一个恰当的标识符呢?
文件尾条件
很多pc编程环境都将ctrl+z视为模拟的EOF。
检测到eof时cin将eofbit和failbit都设为1。可以通过成员函数eof()来查看eofbit是否被设置 检测到EOFcin.eof()返回bool值true否者返回false。同样如果eofbit和failbit被设置为1,啧fail()成员函数返回true否则返回false。注意eof()和fail()报告最近读取的结果 二者为事后报告 所以应该放在不读取之后 通常使用fail()因为他可用于更多的实现中。
常见的字符输入做法
cin.get(ch);
while(cin.fail()==false) // 条件可换为!cin.fail()
{
...
cin.get(ch)
}
然而有一种更好的方法当cin出现在需要bool值得地方时,转换函数将会被调用读取成功为true否则为false
所以条件可改为cin.get(ch) 去除循环内和循环前的读取。
cout.put(ch)用来显示字符。
同样的在读取判断EOF过程中可使用ch=cin.get();只需要条件判断ch!=-1即可。当然也可以将二者整合为一个式子放在条件处。
嵌套循环和二维数组
略。
(完)