循环语句结构

一、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;
}

猜你喜欢

转载自blog.csdn.net/ffsiwei/article/details/80425072
今日推荐