c语言_Day11-07-10
1、循环语句
1、while循环
while循环可理解为执行多次的if语句:
if语句对条件表达式进行判断,若为真则执行选择体1次,if语句结束
while语句对条件表达式进行判断,若为真则执行代码块,代码块语句执行结束后重新回到判断,直到条件表达式为假跳出while语句,否则一直循环,故可理解while语句为执行多次的if语句。int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i++);
}
return 0;
} 补:break**和**continue
break:跳出循环体(终止循环)
continue:跳过本次循环,继续进行下一次判断int main()
{
while (1)
{
static int i = 0;
i++;
if (i % 2 == 1)
{
continue;
}
printf("%d\n", i);
if (i >= 100)
{
break;
}
}
return 0;
} 常见错误代码:int i = 0;
while (i <= 10)
{
if(i == 5)
continue;
printf("%d\n", i++);
} 该代码会进入死循环,因为当i自增至5时进入if语句执行continue,自增操作被跳过,导致一直无法自增以跳出循环体
补:getchar**和**putchar
getchar和putchar为c语言的库函数:
- getchar用于接收键盘输入的字符并返回其所对应ASCII码值
- putchar用于接收ASCII码值并转化为字符输出,本质同printf("%c", ch);
int main()
{
int ch = getchar();
putchar(ch);
printf("\n%c\n", ch);
printf("%d\n", ch);
return 0;
} 常见错误代码:int main()
{
char psd[20] = { 0 };
printf("请输入密码:");
scanf("%s", psd);
printf("\n请确认(Y/N):");
int confirm = getchar();
if (confirm == 'Y' || confirm == 'y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
} 程序运行后,getchar不会暂停程序以等待用户输入信息。经调试发现,confirm被赋值为10,即“\n”。
其原因为,在输入密码时最后输入的回车键被getchar所读取导致
输入函数原理:类似于scanf、getchar等函数为输入函数,其原理为: 输入函数执行前,先查看其输入缓冲区,若输入缓冲区无数据,则等待用户输入;用户输入完毕后,将输入字符存入输入缓冲区
对于scanf函数,其特点为仅获取空格**前的字符并赋值,故输入缓冲区内仍存在**\n,而getchar可直接获取\n而无需等待用户输入
解决方案:在getchar读取用户输入前,再添加一个getchar函数以读走'\n'。若需清空输入缓存区,可利用循环。while (getchar() != '\n') {} 2、for循环
相对于while循环,for循环的整个循环体高度集中化(变量初始化、循环判断、变量调整集中控制),可提升代码的可读性for(变量初始化;循环判断;变量调整)
{
语句...
} 注:当使用for循环时可有效避免continue造成的死循环,因为continue后代码仍会执行变量调整int main()
{
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
continue;
}
printf("%d\n", i);
}
return 0;
} 常见错误(不规范)代码:for (int i = 0; i < 10; i++)
{
printf("HAHA\n");
if (i = 5)
{
printf("HEHE\n");
}
} 程序死循环,尽量避免在for循环体内改变循环变量int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("Hello\n");
}
} 打印10次,因为当i=1时j=10并且不刷新,故无法进入内层for循环
for循环变种:
for(;;){}
int main()
{
for (int x = 0, y = 0; x < 2 && y < 5; x++, y++)
{
printf("hello\n");
}
return 0;
} 面试题:int main()
{
int count = 0;
for (int i = 0, k = 0; k = 0; i++)
{
k++;
count++;
}
printf("%d\n", count);
return 0;
} 不进入循环。因为条件判断部分k被赋值为0(假),条件不满足跳出循环
3、do...while循环
类似于while循环,但先进行循环再判断,故循环体必执行1次int main()
{
int i = 0;
do
{
printf("%d\n", ++i);
}
while (i < 10);
return 0;
}
|