C语言入门part5

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则依次顺序执行

猜你喜欢

转载自blog.csdn.net/qq_43360037/article/details/97522207