一、while循环
while(表达式)
循环语句;
用while语句实现简单的循环:
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
system("pause");
return 0;
}
while语句中的break和continue用法还是不变的,遇到break,直接终止循环。continue的用法还是终止本次循环,再次跳转到while部分的判断,进行下一次的入口判断。
getchar的功能是获取字符,将其显示在屏幕上,但是有一种情况下,getchar会失效,就一段程序具体分析:
int main()
{
int ch = 0;
char password[10] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N)>\n");
ch = getchar();
if ('Y'==ch)
printf("确认成功!");
else if ('N' == ch)
printf("确认失败!");
system("pause");
return 0;
}
我们会发现后面的确认功能丢失了,这是怎么回事呢,原来我们在输入密码的时候输入的是123456\n,scanf语句取走的是123456,所以现在的缓冲区还有\n,接下来使用getchar()语句会把\n读走,所以后面就不会获取字符了。简单的图示来表示:
那么怎么解决这个问题呢?有两种方法:一是利用fflush(stdin)来刷新输入缓冲区,二是自己编写程序读走缓冲区的内容。
方法一不适用vs2013
int main()
{
int ch = 0;
char password[10] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N)>\n");
//fflush(stdin);
while ((ch = getchar()) != '\n')
{
;
}
ch = getchar();
if ('Y'==ch)
printf("确认成功!");
else if ('N' == ch)
printf("确认失败!");
system("pause");
return 0;
}
二、for循环
for(表达式1;表达式2;表达式3)
表达式1:初始化循环变量。
表达式2:条件判断部分,用于什么时候终止循环。
表达式3:调整部分,用于循环条件的调整。
最基础的for循环小程序
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
system("pause");
return 0;
}
在使用for循环中有一些建议:
1、不可以再在循环内部改变循环变量,防止for循环失去控制。
2、for循环中尽量采取半开半闭区间写法。
下面来看一些很容易犯错的小程序:
int main()
{
int i = 0;
int arr[10] = { 0 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hehe\n");
}
system("pause");
return 0;
}
这道题的结果是无限循环hehe。
经过调试我们发现:
发现&i和&arr[12]的地址是相同的,所以这个循环是一直退不出去的,会一直循环下去,所以一定要注意这个代码。
在使用for循环时,初始化部分最好不要省略,否则写出来的代码与我们所期待的结果会有所出入:
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("hehe\n");
}
}
system("pause");
return 0;
}
输出10个hehe。没有初始值,循环10次以后,将不符合循环条件,就会终止循环,与我们的想象的可能有所差异。
问下面这个程序将会循环多上次?
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
{
k++;
printf("hehe\n");
}
system("pause");
return 0;
}
答案是一次都不会循环,因为条件判断部分,k=0;为假,将不会执行本次循环。
int main()
{
char arr1[] = "welcome to china";
char arr2[] = "################";
int sz = strlen(arr1);
int left = 0;
int right = sz - 1;
printf("%s\n", arr2);
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
Sleep(1000);
left++;
right--;
printf("%s\n", arr2);
}
system("pause");
return 0;
}
模拟用户登录:
int main()
{
int i = 0;
char arr[10];
for (i = 0; i < 3; ++i)
{
printf("请输入密码:");
scanf("%s", arr);
if (strcmp(arr, "123456")==0)
{
break;
}
else
{
printf("密码不正确,请重新输入:>");
}
}
if (i > 3)
{
printf("退出程序");
}
else
{
printf("log in:");
}
system("pause");
return 0;
}