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++的理解方式
把当前元素的值加到 sum上 ,然后增加指针使其指向下一个元素
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: ; }