#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
//
//int main()
//{
// //int ch = 0;
// ////eof-end of file 文件结束标志
// //while ((ch = getchar()) != EOF)
// //{
// // putchar(ch);
// //}
//
// //有什么用呢?
// //看下面列子
// int ret = 0;
// int ch = 0;
// char password[20] = { 0 };
// printf("请输入密码:>");
// scanf("%s", password);//输入密码,并存放在password数组中
// //输入缓冲区剩下一个'\n'
// //读取一下'\n'
// while (ch = getchar() != '\n')
// {
// ;
// }
// printf("请确认(Y/N):>");
// ret = getchar();
// if (ret == 'Y')
// {
// printf("确认成功\n");
// }
// else
// {
// printf("放弃确认\n");
// }
//
// return 0;
//}
//
//int main()
//{
// int ch = 0;
// while((ch=getchar()) != EOF)
// {
// if (ch < '0' || ch > '9')
// continue;
// putchar(ch);
// }
// return 0;
//}
//细品上面列题
// for循环
//for(表达式;表达式2;表达式3)
// 循环语句:
//表达式1: 表达式1为初始部分,用于初始化循环变量的。
//表达式2: 表达式2为条件判断部分,用于判断循环时候终止。
//表达式3: 表达式3为调整部分,用于循环条件的调整。
//int main()
//{
// int i = 0;//初始化
// while (i < 10)//条件判断
// {
// //....
// i++;//调整部分
// }
// return;
//}
//while循环不能做到把这三种放在一起,不容易找 所以for循环解决.....
//int main()
//{
// int i = 0;
// //初始化 判断 调整 全部放一块
// for (i = 1; i <= 10; i++)
// {
// printf("%d", i);//12345678910
// }
// return 0;
//}
//在for循环里的break
//int main()
//{
// int i = 0;
// //初始化 判断 调整 全部放一块
// for (i = 1; i <= 10; i++)
// {
// if (5 == i)
// break;
// printf("%d", i);//1234
// }
// return 0;
//}
//在for循环里的continue
//int main()
//{
// int i = 0;
// //初始化 判断 调整 全部放一块
// for (i = 1; i <= 10; i++)
// {
// if (5 == i)
// continue;
// printf("%d", i);//1234678910
// }
// return 0;
//}
//比较一下while循环里的continue
//int main()
//{
// int i = 0;
// while (i < 10);
// {
// if (5 == i)
// continue;
// printf("%d", i);
// i++;
// }
// return 0;
//}
//总结:for循环中的break用法和while循环的用法一致
// for循环中的continue不会进入死循环相当于把i++放在了前面代码中
// for循环中的continue它会跳过本次循环后面的代码,会跳到调整部分
// while循环中的continue会跳过调整部分,导致循环变量没法调整
//不可再for循环体内修改循环变量,防止for循环失去控制.
//举个列子
//int main()
//{
// int i = 0;
// for (i = 0; i < 10; i++)
// {
// if (i = 5) //一般对i的调整不要放在循环内部
// printf("haha\n");
// printf("hehe\n"); //进入死循环
// }
// return 0;
//}
//建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
//举个列子
//int main()
//{
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// int i = 0;
// //10 次循环
// //10 次打印
// //10 个元素
// for (i = 0; i < 10; i++) //“前闭后开区间”指的是i = 0;i < 10
// {
// printf("%d ", arr[i]);
// }
// return 0;
//}
//一些for循环的变种
//int main()
//{
// //变种1
// for (;;)
// {
// printf("hehe\n");
// }
//变种2
// int x, y;
// for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
// {
// printf("hehe\n"); //两次hehe
// }
// return 0;
//}
//变种1
//int main()
//{
// //变种1
// for (;;)
// {
// printf("hehe\n");//死循环
// }
// return 0;
//}
// 1.for循环的初始化、调整、判断 都可以省略
// 但是for循环的 判断部分 如果被省略,那判断部分条件就是:恒为真
// 2.如果不是非常熟练,建议不要随便省略 列如:
//int main()
//{
// int i = 0;
// int j = 0;
// for (i=0; i < 10; i++)
// {
// for (j=0; j < 10; j++)
// {
// printf("hehe\n");//10*10 == 100 输出100个hehe
// }
// }
// return 0;
//}
//比较一下 想想为什么for循环里省略i=0和j=0为什么输出的hehe变为10?
//int main()
//{
// int i = 0;
// int j = 0;
// for (; i < 10; i++)
// {
// for (; j < 10; j++)
// {
// printf("hehe\n");//输出10个hehe
// }
// }
// return 0;
//}
//总结:当i=0时进入第二个for循环执行十次之后出去 但是当i=1时再进入 j的值没有初始化
// 导致只能输出10个hehe
//请问循环要循环多少次?
//0次
//int main()
//{
// int i = 0;
// int k = 0;
// for (i = 0, k = 0; k = 0; i++, k++)
// //k=0是赋值 不是判断
// //只要k = 非零就是死循环!!!
// k++;
// return 0;
//}
//终于最后一个循环了~_~
// do...while()循环
//语法:
//do
// 循环语句;
//while(表达式);
//用do...while循环打印1~10
//int main()
//{
// int i = 1;
// do
// {
// printf("%d", i);
// i++;
// } while (i <= 10);
// return 0;
//}
//在do...while循环中break用法和while、for循环一致
//在do...while循环中的continue
//int main()
//{
// int i = 1;
// do
// {
// if (5 == i)
// continue;
// printf("%d", i);// 1,2,3,4且后面什么都不打印 程序死循环
// i++;
// } while (i <= 10);
// return 0;
//}