55-C++复合语句(语句块)

编写C++for语句的格式(或句法)看上去可能比较严格,因为循环体必须是一条语句。如果要在循环体中包含多条语句,这将很不方便。所幸的是,C++提供了避开这种限制的方式,通过这种方式可以在循环体中包含任意多条语句。方法是用两个花括号来构造一条复合语句(代码块)。代码块由一对花括号和它们包含的语句组成,被视为一条语句,从而满足句法的要求。例如,下列程序使用花括号将3条语句合并为一个代码块。这样,循环体便能够提示用户、读取输入并进行计算。该程序计算用于输入的数字的和,因此有机会使用+=运算符。

//block.cpp —— use a block statement
#include<iostream>
int main()
{
    using namespace std;
    cout<<"The Amazing Accounto will sum and average ";
    cout<<"five numbers for you.\n";
    cout<<"Please enter five values:\n";
    double number;
    double sum = 0.0;
    for(int i=1;i<=5;i++)
    {
    	cout<<"Value "<<i<<": ";
    	cin>>number;
    	sum += number;
	}
	cout<<"Five exquisite choices indeed ! ";
	cout<<"They sum to "<<sum<<endl;
	cout<<"and average to "<<sum / 5<<endl;
	cout<<"The Amazing Accounto bids you adieu!\n";
    return 0;
}

下面是该程序的运行情况:

假设对循环体进行了缩进,但省略了花括号:

for( int i =1 ; i< = 5 ;i++)

    cout<<"Value "<<i<<" : ";

    cin>>number;

    sum +=number;

cout<<"Five exquisite choices indeed ! ";

编译器将忽略缩进,因此只有第一条语句位于循环中。因此,该循环将只打印出5条提示,而不执行其他操作。循环结束后,程序移动到后面几行执行,只读取和计算一个数字。

复合语句还有一种有趣的特性。如果在语句块中定义一个新的变量,则仅当程序执行该语句块中的语句时,该变量才存在。执行完该语句块后,变量将被释放。这表明此变量仅在该语句块中才是可用的:

#include <iostream>
int main()
{

    using namespace std;
    int x =20;
    {
        int y=100;
        cout<<x<<endl;
        cout<<y<<endl;
    }
    cout<<x<<endl;
    cout<<y<<endl;//非法的,y没有被定义
    return 0;
}

注意,在外部语句块中定义的变量在内部语句块中也是被定义了的。

如果在一个语句块中声明一个变量,而外部语句块中也有一个这种名称的变量,情况将如何呢?在声明位置到内部语句块结束的范围之内,新变量将隐藏旧变量;然后就变量再次可见,如下例所示:

#include <iostream>
int main()
{

    using namespace std;
    int x =20;
    {
        cout<<x<<endl;

        int x=100
        cout<<x<<endl;
    }
    cout<<x<<endl;
    return 0;
}

大家动动手试试哦。

猜你喜欢

转载自blog.csdn.net/qq_41200424/article/details/82503974