有基础,进阶用,个人查漏补缺
-
ctype.h中的字符测试/映射函数
2. else和if配对(注意!!!!)if(number > 6) if(number < 12) printf("close!"); else printf("sorry!");
输入 输出 5 None 10 close! 15 sorry! ⚠️如果没有花括号,else和最近的if匹配!!!编译器会忽略缩进
-
如果添加了头文件iso646.h,&&、||、!(与或非)可以用and、or、not代替
-
&&优先级大于||
-
! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
-
在式子(5+3)*(9+6)中,编译器无法保证先计算两个圆括号中的任一式子
-
在式子while(x++ < 10 && x+y <20)中,&&是一个序列点,保证了在对&&右侧表达式求值之前,已经递增了x(先计算&&左侧)
-
continue:执行到comtinue时,会跳过本次迭代的剩余部分,并开始下一轮迭代
-
while中的continue——循环中的if筛选出无效的输入,如输入188时,会报告188 is an invalid value.跳过处理有效输入部分的代码,开始下一轮循环,读取下一个输入值
while(scanf("%f", &score) == 1) { if(score<60 || score>100) { printf("%f is an invalid value.", score); continue; } printf("accepcted %f\n", score); }
-
for中的continue——执行完continue后,首先递增count,然后将递增后的值和10比较
for(count=0; count<10; count++) { ch = getchar(); if(ch == '\n') continue; putchar(); }
-
-
break:当程序执行到循环中的break时,会终止包含它的循环,并继续执行下一阶段。
在输入188时,不是跳至执行下一轮循环,而是直接退出while(包含它的当前循环)。如果在内嵌循环中有break,则不会影响外层循环。
while(scanf("%f", &score) == 1) { if(score<60 || score>100) { printf("%f is an invalid value.", score); break; } printf("accepcted %f\n", score); }
-
switch多重标签——假设输入b,switch会定位到标签case’b’:的位置,由于标签没有关联break,所以程序流会直接定位到case’B’,本质上,两个标签都指的是相同的语句。
while((ch=getchar()) != '#') { switch(ch) { case 'a': case 'A':a_c++; break; case 'b': case 'B':b_c++; break; default:break; } }