#include<stdio.h>
#include<string.h> //strcmp函数
#include<windows.h> //Sleep函数
#include<stdlib.h> //system执行("cls")清屏
int main()
{
/*int ret=0;
int ch=0;
char password[20]={0};
printf("请输入密码:>");//(输入函数)—》输入缓冲区拿走输入的密码(换行\n)
//scanf只会把空格之前的数字拿走,空格后的ABCD(\n)无法解决
scanf("%s",password);//缓冲区还剩\n,夺走消失
while((ch=getchar())!='\n')//创造循环处理掉缓冲区的其他东西
{
;
}
printf("请输入(Y/N):>");
ret=getchar();//(输入函数) 从输入缓冲区里夺了个换行\n
if(ret=='Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
*/
/*int ch=0;
while ((ch=getchar())!=EOF)//EOF指的是文件结束标志,ctrl+z可得同样效果
{
if(ch<'0'||ch>'9')
continue;//跳过本次循环代码到下一阶段
putchar(ch);
}
*/
//for
//int i=0;
/*for(i=1;i<=10;i++)初始化 判断 调整
{
if(i==5)
//break;//跳出循环
continue;//跳过本次循环
printf("%d ",i);
//不会造成死循环
}
int i=1;//初始化
while(i<=10)//判断
{
if(i==5)
//break;//跳出循环
continue;//跳过本次循环
printf("%d ",i);
i++;//调整
//出现死循环123455555555...
}
*/
/*int i=0;
for(i=0;i<10;i++)
{
if(i=5)//死循环代码,不可在for循环体内改变循环变量
//建议采取for循环控制变量取值采用“前闭后开区间”的写法
printf("haha\n");
printf("hehe\n");
}
*/
//举例
/*int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
//10次循环、打印、元素
for(i=0;i<10;i++)//左闭右开区间的写法
{
printf("%d ",arr[i]);
}
//一些for循环的变种
for(;;)//没有初始化判断调整
//1.for循环的初始化判断调整都可以省略,
//但是for循环的判断部分如果被省略,那判断条件恒为正
{
printf("hehe\n");//出现死循环hehehehehehehe...
}
*/
//举例
/*int i=0;
int j=0;
for(;i<10;i++)//外层10次
{
for(;j<10;j++)//内层10次
{
printf("hehe\n");
}
}
//在外层当中,i变为1,内层for循环重复十次hehe, 当j
//10*10=100次
*/
//计算n的阶乘
/*int n;
scanf("%d",&n);
int fact=1;
int i;
for(i=1;i<=n;i++)
{
fact*=i;
}
printf("阶乘=%d ",fact);
*/
//计算一到10的阶乘的和
/*int n;
int i;
int j;
int fact=1;
int sum=0;
for(n=1;n<=10;n++)
{
fact=1;//如果没有初始化会出现阶乘叠加
for(j=1;j<=n;j++)
{
fact*=j;//若无初始化出现2*1*1*2*3
}
sum=sum+fact;
}
printf("sum=%d",sum);
*/
//二分法
//eg举例引导
/*int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=7;
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
if(k==arr[i])
printf("找到了,下标是%d\n",i);
}
if(k==sz)
printf("找不到了\n");
int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=7;
int sz=sizeof(arr)/sizeof(arr[0]);//计算元数个数
int left=0;//左下标
int right=sz-1;//右下标
while(left<=right)
{
int mid=(left+right)/2;
if(arr[mid]<k)
{
left=mid+1;
}
else if(arr[mid]>k)
{
right=mid-1;
}
else
{
printf("找到了,下标是%d\n",mid);
break;
}
}
if(left>right)
printf("找不到了\n");
//编写代码,演示多个字符从两端移动,向中间汇聚
//输出welcome to bite!!!!!
//######################
//w#####################
//we####################
//wel###################
//...
//welcome to bit!!!!!!!!
//把arr1里面的元素赋值到arr2里面去
char arr1[]="welcome to bit!!!!!";
char arr2[]="###################";
int left=0;
//int right=sizeof(arr1)/sizeof(arr[0])-2;//-1是err的,!之后还有\0,要再减少一个
//另一种方法是使用strlen函数求字符串长度
int right=strlen(arr1)-1;
while(left<=right)
{
arr2[left]=arr1[left];
arr2[right]=arr1[right];
printf("%s\n",arr2);
Sleep(1000);//每打印一次停留一秒(1000毫秒)
//slepp函数
system("cls");//执行系统命令的一个函数 cls清空屏幕
left++;
right--;
}
printf("%s\n",arr2);
*/
//编写代码实现,模拟用户登录情景,并且只能登录三次。
//(只允许输入三次密码,如果密码正确则提示登陆成功,密码错误三次则退出)
//循环三次
int i=0;
char password[20]={0};
for(i=0;i<3;i++)
{
printf("请输入密码:>");
scanf("%s ",password);
if(strcmp(password,"123456")==0)
//==不能用来比较两个字符串相等的,应该使用库函数strcmp
//strcmp函数规定左边大于右边返回正数,左边等于右边返回0,左边小于右边返回负数
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if(i==3)
{
printf("三次密码均错误,请退出\n");
}
return 0;
}