the c programing language 学习过程3
ControlFlow 控制流
specify 指定 compound statement 复合语句 cryptic有隐含意义的 ambiguity歧义 robust稳健 disintegration解体 sparingly节制 algorithm演算法 appropriate适合的适当的 iteration循环 nontrival非平凡的 重大的 dogmatic教条 武断
1复合语句(分程序)语法上等价于单个语句 分程序最右边的}不用加分号
2else在ifelse语句中可以缺省 但是嵌套中会与最近的if 匹配 如果不希望这样 最好加上花括号 (C PRIM PLUS 里面提到 else;加上可以微微提高程序效率,同时在多重elseif语句中 可以用最后个else来检查错误)
if ( n >= 0 )
for ( i = 0; i < n; i++ )
if ( s[i] > 0) {
printf ( "…" ); //注意这里也要加分号
return i;
}
else /* 错 */
printf ( "error -- n is negative\n" ); 比如这坨 缩进看起来else匹配第一个if 实际上还是匹配第二个if
3switch case ‘常量或者整数表达式’:statement;
statement;
break;//立刻exit form the switch 不加的话 switch会继续执行下一个语句 return也可以结束 同样 break也可以结束while for do的循环
4不添加break可以让程序执行下一个case 但是这个方法不够稳健 程序修改时容易出现错误 我们应当尽量减少这种情况 在必要的情况下 要加上注释 同样d e f a u l t 之后加一个break;也为程序多一道保险
5,运算符 从左到右运算 c=(1+1,2+1) 取右边的值 2+1
6continue用在while for 当中不能用在switch 但是在switch内出现可以控制switch外的循环
7goto 非必要 但是也挺方便的 (CPRIME +我看到一个说这个方法有个缺点 是啥来着=,=) 标签带冒号 覆盖范围是整个函数
goto found;
BLABLABLA
found:
blablabla
用goto的语句
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (a[i] == b[j])
goto found;
/* 没有找到相同元素 */
…
found:
/* 取一个满足a[i] ==b[j]的元素 */
…
不用的语句
found = 0;
for (i = 0; i < n && !found; i++)
for (j = 0; j < m && !found; j++)
if (a[i] == b[j])
found = 1;
if (found)
/* 取一个满足a[i-1] ==b[j-1]的元素 */
…
else
/* 没有找到相同元素 */
…
虽然goto容易看懂,也方便维护 但是最好别用 (查了下 大致是说会弄乱程序逻辑和结构 当然你的goto只是向下延伸应该问题不大 这玩意学的时候看到说不要用 自己也没怎么记)