C语言入门part5
关键字:break和continue的注意事项,EOF,getchar和putchar的,scanf和getchar()的坑,各种经典深坑(循环的判断条件,逻辑或符号的运用||,switch语句,++,break)
break和continue的注意事项
- break和continue都是放在循环体内的,不能单个使用
EOF
EOF:是个宏,意为end of file,文件结尾标志
- 在dos框里结束getchar()输入ctrl+z
- ctrl+c中断程序死循环
getchar和putchar
-
getchar()从键盘读取一个字符
-
putchar()将相应字符输出
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF) // 键盘未读到ctrl+c(结束程序)或ctrl+z(中断死循环)就一直读取并打印
{
if (ch < '0' || ch > '9') //只打印数字
{
continue;
}
putchar(ch);
}
return 0;
}
scanf和getchar()的坑
scanf("%d",&num);
ch=getchar();
putchar(ch);
程序本意让用户输入一个数字,再输入一个字符,打印字符,但运行结果是输入数字回车后程序结束,原因是getchar将回车吃掉,打印的字符是回车
各种经典深坑
循环的判断条件
int i=0;
int j=0;
for(i=0,j=0;j=0;i++,j++)
{
j++;
}
循环不执行,因为 for(i=0,j=0;j = 0;i++,j++),判断条件j=0是个赋值语句,意为假,即for(i=0,j=0;0;i++,j++),所以不执行,所以要注意循环判断条件的书写
逻辑或符号的运用 ||
int i=0;
int j=0;
if((++i>0)||(++j>0))
{
打印i,j的值;
}
打印结果 i=1,j=0 , 此处注意 || 逻辑或符号(也叫短路或),前面条件为真后面就不执行,前面为假后面才执行
int i=0;
int j=0;
if((i++>0)||(++j>0))
{
打印i,j的值
}
打印结果 i=1,j=1 理由见上
switch语句,++,break)
int i=0
switch(++i) //i=1
{
case 0:++i;
case 1:++i;//进入,i=2,没有break 进入case2
case 2:++i;//进入,i=3
}
打印结果 i=3
int i=0
switch(i++)//i=0
{
case 0:++i;//进入,执行之前执行上面的i++得i=1,然后在执行这一步的++i,i=2 没有break所以顺次执行
case 1:++i;然后在执行这一步的++i,i=3
case 2:++i;然后在执行这一步的++i,i=4
}
打印结果 i=4,case没有break则依次顺序执行