复合语句
因为循环体必须是一条语句,但是使用过程中,多条语句也是不可避免的。因此就可以将多条语句,利用一对花括号来构造一条复合语句(也称为代码块,block),从而只被视为一条语句。
但是复合语句还有一种有趣的特性。如果在复合语句中定义一个新的变量,则仅当程序执行该复合语句中的语句时,该变量才存在,但复合语句执行完毕之后,变量则会被释放。
//P138
#include<iostream>
int main()
{
using namespace std;
int x = 20;
{ //block starts
int y = 100;
cout << x << endl; //ok
cout << y << endl; //ok
} //block ends
cout << x << endl; //ok
cout << y << endl; //invalid,won't compile 此处的y是未声明和初始化的变量
return 0;
}
若是在如果在复合语句声明了一个变量,但是在复合语句外同时也声明了这个变量,则复合语句的变量的值则只会在复合语句中使用,复合语句的变量会隐藏复合语句外的变量的值,但是复合语句结束后,变量会再次可见。
//P138
#include<iostream>
int main()
{
using std::cout;
using std::endl;
using std::cin;
int x = 20; //original x
{ //block starts
cout << x << endl; //use original x = 20
int x = 100; //new x
cout << x << endl; //use new x = 100
} //block ends
cout << x << endl; //use original x = 20
cin.get();
return 0;
}
运行结果:
20
100
20
关于运算符()
的优先级:
//P140
#include<iostream>
int main()
{
using namespace std;
int cats;
cats = 17, 240;
cout << "cats = 17, 240 = " << cats << endl;
(cats = 17), 240;
cout << "(cats = 17), 240 = " << cats << endl;
cats = (17, 240);
cout << "cats = (17, 240) = " << cats << endl;
cats = (240, 17);
cout << "cats = (240, 17) = " << cats << endl;
cin.get();
return 0;
}
输出结果
cats = 17, 240 = 17
(cats = 17), 240 = 17
cats = (17, 240) = 240
cats = (240, 17) = 17
C-风格字符串的比较
word == "mate";
首先,数组名是数组的地址。同样,右边的字符串的也是地址,因此这里同时进行了地址的比较;
但是,两个不一样的地址,可能包含同一个字符串;
因此,比较需要利用函数strcmp()
进行比较。
strcmp()
的用法
该函数接受两个字符串地址作为参数,同时也可以是指针,字符串常量或字符数组名;
如果两个字符串相同,该函数将返回零;
如果第一个字符串按字母顺序排在第二个字符串之前,则strcpy()
将返回一个负数值;
如果第一个字符串按字母顺序排在第二个字符串之后,则strcpy()
将返回一个正数值。
等待一段时间:编写延时循环
首先,了解一个ANSI C和C++库中的函数clock()
,会返回程序开始执行后所用的系统时间。
- 但是,
clock,()
返回的时间的单位不一定是秒; - 其次,该函数返回类型在某些系统上可能是
long
,在另一些系统上可能是usigned long
或者其他类型。
但是在头文件ctime
提供了这些问题的解决方案。
它定义了一个符号常量—“CLOCKS_PER_SEC”,该常量等于每秒钟包含的系统时间单位数。
而且,也将clock_t
作为clock()
返回类型的别名,这意味着可以将变量声明未clock_t
类型,编译器将把它转换为long
,unsigned int
或合适系统的其他类型。
//waiting.cpp -- using clock() in a time-delay loop
#include<iostream>
#include<ctime> //describes clock() funtion,clock_t type
int main()
{
using namespace std;
cout << "Enter the delay time,in seconds:";
float secs;
(cin >> secs).get();
clock_t delay = secs*CLOCKS_PER_SEC; //convert to clock ticks
cout << "starting\a\n";
clock_t start = clock();
while (clock() - start < delay) //wait until time elapses
;
cout << "done \a\n";
cin.get();
return 0;
}