1.switch case 组合
switch ( 整型变量 / 常量 / 整型表达式 ){
case var1 :
break ;
case var2 :
break ;
case var3 :
break ;
default :
break ;
}
又有朋友问了,已经有if else为何还要switch case, 其实是因为switch语句也是一种分支语句,常常用于多分支的情况。这种多分支,一般指的是很多多分支,而且判定条件主要以整型为主。而且是指大数据的,用swich case 比 if else 会方便很多。(就是少写很多代码,可以偷懒)
那case和break的作用是什么在switch中?
答案是case是作为判判定功能而break是作为分支功能
即:先从switch()传进去一个数,然后找case进行判断,当然如果没有可以与之判断的case就会走向default。再就是进入case,如果里面没有break,就会往下面的case继续执行,直到遇到break或者结束程序。
如果多个不同 case 匹配,想执行同一个语句,推荐做法:
#include <stdio.h> #include <windows.h> int main() { int day = 6; switch (day){ case 1: case 2: case 3: case 4: case 5: printf("周内\n"); break; case 6: case 7: printf("周末\n"); break; default: printf("bug!\n"); break; } system("pause"); return 0; }
结论: case 之后,如果没有 break ,则会依次执行后续有效语句,直到碰到 break
对于switch && case && break && default 的总结
下面给大伙一张之前做的笔记图同时解释:
1.好像说得很清楚了就不解释了
2.当一个case要执行多条语句时,如果需要在里面定义变量,就需要用{}括起来这一个case语句里面的代码块,或者只写一个函数,然后调用这个函数(就此一条语句),当然后面都要跟上break。(其实个人一致认为break跟不跟完全是无法规定的,都要看具体情况,所以大家自行斟酌)
3.好像也挺清楚的。
4.额.....也清楚哈,不懂私我哈!
5.case后面只能接常量,不能是const修饰的常量,因为其本质还是变量,但是可以用define定义的常量。最后的布局方式就是大家最好按照从小到大的顺序去写case,当然还有一个小技巧就是把常用的case写在前面可以提高程序的效率。
PS:目前了解一下就行
2.getchar
头文件:
作用1:从缓冲区读走一个字符,相当于清除缓冲区。
作用2 : 前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,接下来的scanf()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误。
简单说就是从键盘读一个字符进去。下面也可以很好地反应出来:
这里中间有两个空行是因为一个是我们回车的时候有一个\n保留了,还一个就是我们程序自己输入的\n。现在我们不带\n
PS:再一个大家很可能忽视的,键盘输入的内容或者是显示器中打印的内容,全部都是字符!
printf返回值:返回的是打印字符的个数!(有‘\0’)
虽然我们输入的是字符,但是会经过这些函数转换为我们想要的数字或其他。(就是%d或者啥的)所以键盘,显示器都称之为字符设备。
总结:
getchar() 用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值 - 1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码, 当程序调用getchar时.运行程序时 就等着用户从按键输入, 用户输入的字符被存放在键盘缓冲区中.直到用户按回车为 止(回 车字符也放在缓冲区 中),当用户输入回车之后,getchar才开始从输入流中每次读入一个字符,输入的字符不只一个的时候,后续的getchar调用不会等待用户按键, 而直接读取缓冲区中的字符, 直到缓冲区中的字符读完之后,才等待用户按键,getchar函数输入数字也按字符处理,单个的getchar函数输入多于一个字符时,只接收第一个字符。