isalpha()方法
是标准C 库的一个例程,如果它的参数是一个英文字母,则返回值为true。为了使用它 程序员必须包含系统头文件ctype.h
char ch;
if ( isalpha( ch ))
++consonantCnt;
关于switch 语句
声明语句也可以被放在switch 语句的条件中 如下所示 as3中不成立
switch( int ival = get_response() )
ival 被初始化并且读初始化值成为与每个case 标签作比较的值,
ival 在整个switch 语句中是可见的,但在其外面并不可见。
把一条 声明语句放在与case 或default 相关联的语句中是 非法的,除非它被 放在一个语句块中。例如 下列代码将导致编译时刻错误
case illegal_definition:
// 错误 :声明语句必须被放在语句块中
string file_name = get_file_name();
// ...
break;
如果一个 定义没有被包围在一个语句块中,那么它在case 标签之间是可见的,但是只有当定义它的case 标签被执行时,它才能被初始化。因此需要一个语句块来保证名字是可见的,并且也只有这个语句块才能够使用它,而且可以保证它只在这个语句块中才能被初始化 。
为了使我们的程序能通过编译 必须引入语句块 重新实现case 标签如下
case ok:
{
// ok: 声明语句被放在语句块中
string file_name = get_file_name();
// ...
break;
}
for语句
下面都是合法的condition 实例
(...; *st1++ = *st2++; ... )
(...; char ch = getNextChar(); ... )
在标准C++之前 定义在init-statement 中的对象的可视性可以扩展到for 循环包含的语句块之外,例如 ,给定下面两个for 循环 它们位于同一个语句块之中
{
// 在标准C++中合法 但是在标准C++之前 ival 被定义两次 所以不合法
for ( int ival = 0; ival < size; ++ival ) // ...
for ( int ival = size -1; ival >= 0; --ival ) // ...
}
as3与标准C++之前情况相同
while 循环
condition 可以是表达式 如
bool quit = false;
// ...
while ( ! quit ) {
// ...
quit = do_something();
}
string word;
while ( cin >> word ) { ... }
或是 初始化定义 如
while ( symbol *ptr = search( name )) {
// do something
}
*parray_begin++的理解方式
goto 语句
goto 语句提供了函数内部的无条件分支,它从goto 语句跳转到同一函数内部某个位置的一个标号语句。在当前关于良好的程序设计实践的看法中,它的用法被认为是应该抛弃的。
goto 语句的语法形式如下
goto label;
这里的label 是用户定义的标识符 标号[ labe ] 。 语句只能用作goto 的目标 必须由冒号结束,且标号语句 不能紧接在结束右花括号的前面。在标号语句后面 加一个空语句 是处理这种限制的典型方法 例如
end: ; // 空语句
}
goto 语句不能向前跳过没有被语句块包围的声明语句 例如 下面的代码将导致编译时刻错误
int oops_in_error()
{
// mumble
goto end;
// 错误 : 跳过声明语句
int ix = 10;
// ... code using ix
end: ;
}
正确的做法是把声明语句以及使用该声明的语句放在一个语句块中,例如
int ok_its_fixed()
{
// mumble
goto end;
{
// ok: 在语句块中声明语句
int ix = 10;
// ... code using ix
}
end: ;
}