选择语句&循环语句&输入输出
写代码就是要写人写的代码
选择语句
if
//形式如下:
if (s>3)
{
}
else if()
{
}
else
{
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tsnq6X2p-1673155109320)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108092219181.png)]
50>18:则左侧为1,1小于30,进而50依然打印青年
此写法错误
要使用&&
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3S7NzWVb-1673155109323)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108092341327.png)]
顺序(可以删掉&&前面的,毕竟从上往下执行)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3k5Smsrc-1673155109324)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108092652591.png)]
悬空else(else自动跟离他最近的代码对齐)加括号截然不同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bwY4phm-1673155109324)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108093322191.png)]
if中的判断(==)误写成(=)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnb9wZ44-1673155109324)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108100223207.png)]
则有:5赋值给num,进而num=5,5为非0为真;进而if判断为真,进而进入循环执行代码。
建议:写成5 == num;(错了也无所谓)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIl8HwXV-1673155109325)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108100305229.png)]
switch
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tE90qNZ2-1673155109325)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108103311819.png)]
switch()括号中必须是整形
float不行,但是short,long,long long都可以,整形
case中必须是常量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNBBZTPr-1673155109326)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108103654874.png)]
(break)switch顺序是到可行的之后执行剩下的
注意:这时候如果没有break,会导致输入5,屏幕会输出5,6,7三种情况,switch顺序是到可行的之后执行剩下的
(default:)
用法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFjNoKtE-1673155109326)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108105108312.png)]
不可以可以case day大于等于1小于等于5 是工作日
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ckOSVcH-1673155109326)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108104643715.png)]
case 1&&2&&3:这样可行?
不能
这样就是一个条件了
还是那句话:case后面跟整形常量表达式
一个break只能退出自己的switch
switch允许嵌套使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppW8gL7Q-1673155109327)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108105515851.png)]
if&&switch区别
switch通常用来点判断 if范围判断
循环语句
while
多行代码依然加{}
BREAK:永久终止一个循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ee3x8osk-1673155109327)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108111920039.png)]
输出 1 2 3 4,结束
CONTINUE:跳过后面代码,直接回到循环的判断部分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZkcHYgW-1673155109327)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108112432606.png)]
输出1 2 3 4 ,然后死循环
输入输出
scanf&printf
scanf用多个^Z(ctrl+z)才会停下来
scanf默认读取到空格才会停下来
改进
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SYHsqccZ-1673155109328)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108115606172.png)]
这样的目的:可以scanf输入空格拉!
getchar&&putchar(一个字符)
用法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tnfyJAHn-1673155109328)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108113126112.png)]
getchar/putchar读取到字符时候返回ascii值,所以用int接收
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p16PZonn-1673155109328)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108113550865.png)]
按^Z的时候返回-1(ascii:字符:1~127),所以EOF
getchar&putchar的输入缓冲区:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVK3rn60-1673155109329)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114403534.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkFL4aKO-1673155109329)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114423874.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fjYtbTaU-1673155109329)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114455136.png)]
所以直接确认失败了(判断是\n不是Y)
如何处理缓冲区的\n
改进:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCF4R6Ux-1673155109330)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114705993.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhge75U4-1673155109330)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114832155.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P6G9MbEz-1673155109330)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114847172.png)]
如何处理缓冲区还有**“空格”abc\n**
改进
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8u7pNDjn-1673155109331)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108114956545.png)]
加循环处理空格后字符问题但\n还在
密码改进(可以有空格)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JuMfgz0j-1673155109331)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108115606172.png)]
这样的目的:可以scanf输入空格拉!
利用getchar/putchar只输入数字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0lfaP11r-1673155109331)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108120021687.png)]
利用ascii值
/0:字符串的结尾
getchar()从缓冲区读走一个字符,相当于清除缓冲区(对应的那个)
不是销毁
键盘中输入的数据存放在缓冲区,输入类函数从缓冲区读取数据,读取成功后读取的数据在缓冲区中清空,但是你已经读取成功了,所以数据仍然被你存储起来了
putchar拿的是getchar手里面的数据
而不是缓冲区里面的的数据
vscode编辑器&&vs2022编译器
vscode可以安装很多插件
书籍推荐
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0D4Wo1v6-1673155109332)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108093904974.png)]
return 0:正常执行主函数,就会返回0,main函数也是被人调用的
调试-窗口-调用堆栈
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JlhuKm4c-1673155109332)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108095752784.png)]
点一下-显示更多信息[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TDQMtE6Y-1673155109333)(C:\Users\10169\AppData\Roaming\Typora\typora-user-images\image-20230108100048992.png)]
main也被调用