1、getchar()和putchar():
getchar() 没有参数,返回来自输入设备的下一个字符;
putchar() 打印它的参数;
scanf() 返回的状态,getchar() 返回的元素的值,可以用输入元素的值本身决定何时终止循环;
类似scanf():
while ((ch = getchar()) != '\n')
2、ctype.h:
// isalpha() 函数的参数是字母;
|
|
isalnum() 字母或数字isalpha() 字母isblank() 空白字符,空格、水平制表符、换行等iscntrl() 控制字符,如ctrl+Bisdigit() 阿拉伯数字(0-9)isgraph() 空格之外的打印字符islower() 小写字母isprint() 打印字符,包括空格ispunct() 标点符号isspace() 空白字符(空格,进纸,换行符,回车,水平制表符,垂直制表符)siupper() 大写字母isxdigit() 十六进制数tolower() 如果参数为大写字母,即转化为小写字母,否则返回原值toupper() 如果参数为小写字母,即转化为大写字母,否则返回原值
3、else if 嵌套:
C99标准最少支持127层嵌套;
如果没有花括号指明,else与它最近的一个if相匹配;
4、求值顺序;
从一个操作数前进到下一个操作数之前,所有的副作用都会生效;C 保证 发现某个元素使表达式总体无效,求值立即停止;
if (number != 0 && 12 / number == 2) // 保证除数不为0
while (x++ < 10 && x + y < 20) // 保证在运行右边的表达式之前,先 x++
5、continue 和 break:
continue 处于嵌套结构中时,仅影响包含它的最里层的结构;
对于do while 和 while 循环,continue 语句之后的动作是求循环判断表达式的值;对于 for 循环,continue 语句之后的动作是先求更新表达式的值,在求循环判断表达式的值;
break 导致程序终止包含它的循环,并进入程序的下一阶段;在for循环中,控制段的更新表达式也将被跳过;
break 用于循环和switch语句,continue 仅用于循环;
6、switch 和 else if:
switch:适用于字符和数字的分支;
else if:适用字符、数字、浮点数、表达式等的分支;
课后习题
//#10 输入身份,选择税金种类和应征收税收入,然后计算税金; #include "stdafx.h" #include "stdio.h" // 清除缓冲区 void clearBuffer() { int c = 0; while ((c = getchar()) != '\n' && c != EOF) ; } int main() { while (true) { int d = 0; float basepay = 0.0, prev_pay = 0.0f, tax_pay = 0.0f, pay = 0.0; printf("Enter the number corresponding to the desired pay rate or action:\n"); printf("1)单身 2)户主\n3)已婚,共有 4)已婚,离异\n5)quit\n"); while (scanf("%d", &d) != 1) //用!= 执行错误提示,限制输入为int型 { printf("please input right choice number(1-5):\n"); clearBuffer(); } bool valid = true; switch (d) { case 1: basepay = 17850; break; case 2: basepay = 23900; break; case 3: basepay = 29750; break; case 4: basepay = 14875; break; case 5: return 0; default: { printf("please input right choice number(1-5):\n"); valid = false; } break; // 输入数字错误,跳转到最开始 while (true) } if (!valid) continue; // 中间段语句,用if 来判断是否输出; printf("the basepay is %.1f$,and please input your figure:\n", basepay); while (scanf("%f", &prev_pay) != 1) //用!= 执行错误提示,限制输入为数字 { clearBuffer(); printf("please input right figure:\n"); } if (prev_pay < basepay) tax_pay = prev_pay * 0.15; else tax_pay = basepay * 0.15 + (prev_pay - basepay) * 0.28; printf("you have figure %.2f ,tax is %.2f\n", prev_pay, tax_pay); clearBuffer(); // 注意清除输入缓存 } }