输入函数scanf getchar 输入缓冲区
// int ret = 0;
// int ch = 0 ; //这里int是因为那里得到的是ASCII码表
// char password[20] = { 0 };
// printf("请输入密码:>"); //例子1235456 实际123456\n 但是scanf自接收\n前的字符 会剩余\n 遇到空格也停止
// scanf("%s", password);
// printf("请确认y/n");
// while ((ch = getchar())!='\n') //解决办法 不断接收字符直到遇到'\n'
// {
// ; //不做任何操作
// }
if (ch < '0' || ch>'9') //只会接收输出数字字符
for循环
建议不要在for循环内改变循环变量,防止for循环失去控制
建议for语句的循环控制变量取值采取"前闭后开区间"写法for(i=0;i<10;1++)十次循环 十次打印 十个元素
for (;;) //for循环初始化 调整 判断都可以省略 判断部分省略,那判断部分条件就是:恒为真 不是非常熟练不建议使用
两个循环变量
for (x = 0, y = 0;x < 2 && y < 5;++x,y++)
for (i = 0, k = 0;k = 0;i++, k++) //一次都不循环k=0为赋值,0为假
二分法查找法(折半查找法)
log(2)/log(n) 2^32
//#include <stdio.h>
//
找一个数 很简单 但二分思想
//
//int main()
//{
// 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)
// {
// right = mid + 1;
// }
// else if (arr[mid]<k)
// {
// left = mid + 1;
// }
// else
// {
// printf("找到了,下标是:%d\n", mid);
// break; //跳出循环
// }
// }
// if (left > right)
// {
// printf("找不到\n");
// }
// return 0;
//}
int right = sizeof(arr1) / sizeof(arr[0])-2;//减二的原因是下标为0 1 2 3...,且字符串末尾是\0;
int right = strlen(arr1)-1;//strlen遇到\0就停止了 计算字符串长度
//#include <stdio.h>
//#include <string.h>
//#include <windows.h>
//#include <stdlib.h>
Sleep(1000);//1000毫秒
system("cls");//执行系统命令的一个函数-cls-清空屏幕
if (strcmp(password, "abc123456") == 0)//等号不能用来比较两个字符串是否相等;应该使用一个库函数-strcmp
#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//
//int main()
//{
// //输入函数scanf getchar 输入缓冲区
// int ret = 0;
// int ch = 0 ; //这里int是因为那里得到的是ASCII码表
// char password[20] = { 0 };
// printf("请输入密码:>"); //例子1235456 实际123456\n 但是scanf自接收\n前的字符 会剩余\n 遇到空格也停止
// scanf("%s", password);
// printf("请确认y/n");
// while ((ch = getchar())!='\n') //解决办法 不断接收字符直到遇到'\n'
// {
// ; //不做任何操作
// }
// ret = getchar();
// if (ret == 'y')
// {
// printf("确认成功\n");
// }
// else
// {
// printf("确认放弃\n");
// }
// return 0;
//}
//#include <stdio.h>
//
//int main()
//{
// int ch = 0;
// while ((ch = getchar()) != EOF)
// {
// if (ch < '0' || ch>'9') //只会接收输出数字字符
// continue;
// putchar(ch);
// }
// return 0;
//}
//for循环
//#include <stdio.h>
//
//int main()
//{
// int i = 0; //初始化
// while (i < 10) //判断
// {
// //.......
// i++; //调整
// } //后续调整不便,代码添加后会分得很开
// return 0;
//}
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// for (i = 1;i <= 10;i++) //1、先初始化2、判断3、执行4、判断5、执........
// {
// if (5 == i)
// //break; //终止循环1 2 3 4
// continue; //1 2 3 4 6 7 8 9 10
// printf("%d\n", i);
// }
// return 0;
//}
//建议不要在for循环内改变循环变量,防止for循环失去控制
//建议for语句的循环控制变量取值采取"前闭后开区间"写法for(i=0;i<10;1++)十次循环 十次打印 十个元素
for变种
//#include <stdio.h>
//
//int main()
//{
// for (;;) //for循环初始化 调整 判断都可以省略 判断部分省略,那判断部分条件就是:恒为真 不是非常熟练不建议使用
// {
// printf("fuck\n"); //死循环
// }
// return 0;
//}
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// int j = 0;
// for (i = 0;i < 10;i++)
// {
// for (;j < 10;j++)
// {
// printf("fuck\n"); //只打印十个,因为j++到10不再符合判断
// }
// }
// return 0;
//}
两个循环变量
//#include <stdio.h>
//
//int main()
//{
// int x, y;
// for (x = 0, y = 0;x < 2 && y < 5;++x,y++)
// {
// printf("hehe\n");
// }
// return 0;
//}
例子 判断有几次循环
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// int k = 0;
// for (i = 0, k = 0;k = 0;i++, k++) //一次都不循环k=0为赋值,0为假
// k++;
// return 0;
//}
//do.....while循环 先做再,判断
//#include <stdio.h>
//
//int main()
//{
// int i = 1;
// do { //do后面记得加{}
// if (5 == i)
// //break; //跳出循环
// continue; //死循环 跳过本次循环后面的代码
// printf("%d ", i);
// i++;
// } while (i <= 10); //分号
// return 0;
//}
//1、计算n的阶乘
//#include <stdio.h>
//
//int main()
//{
// int n = 0;
// int i=1, j=1;
// scanf("%d", &n);
// do {
// j++;
// i *= (i+1);
// } while (j<n);
// printf("%d",i);
// return 0;
//}
//
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// int n = 0;
// int ret = 1;
// scanf("%d", &n); //n=100这种溢出的不算
// for (i = 1;i <= n;i++)
// {
// ret = ret * i;
// }
// printf("ret = % d\n", ret);
// return 0;
//}
//#include <stdio.h>
//
//int main()
//{
// int i = 0;
// int n = 0;
// int ret = 1;
// int sum = 0;
// for (n = 1;n <= 3;n++)
// {
// ret = 1;
// for (i = 1;i <= n;i++)
// {
// ret = ret * i;
// }
// //n的阶乘
// sum = sum + ret;
// }
//
// printf("sum = %d\n", sum);
// return 0;
//}
不过效率不高,可以优化
//#include <stdio.h>
//
//int main()
//{
// int n = 0;
// int ret = 1;
// int sum = 0;
// for (n = 1;n <= 3;n++)
// {
// ret = ret * n; //少一个循环
// //n的阶乘
// sum = sum + ret;
// }
//
// printf("sum = %d\n", sum);
// return 0;
//}
//写一个代码,在arr数组(有序的)中找七
//#include <stdio.h>
//
//int main()
//{
// int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// int k = 6;
// int sz = sizeof(arr) / sizeof(arr[0]);
// int i = 0;
// for (i = 0;i < sz;i++)
// {
// if (k == arr[i])
// {
// printf("找到了,下标是:%d\n", i);
// break;
// }
// }
// if (i == sz)
// printf("找不到\n");
// return 0;
//}
效率还是太低 可能要找n次
//
二分法查找法(折半查找法)log(2)/log(n) 2^32
//
//#include <stdio.h>
//
找一个数 很简单 但二分思想
//
//int main()
//{
// 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)
// {
// right = mid + 1;
// }
// else if (arr[mid]<k)
// {
// left = mid + 1;
// }
// else
// {
// printf("找到了,下标是:%d\n", mid);
// break; //跳出循环
// }
// }
// if (left > right)
// {
// printf("找不到\n");
// }
// return 0;
//}
//#include <stdio.h>
//#include <string.h>
//#include <windows.h>
//#include <stdlib.h>
//
多字符向中间靠拢
//
//int main()
//{
// char arr1[] = "welcome to mingda";
// char arr2[] = "*****************";
// int left = 0;
// //int right = sizeof(arr1) / sizeof(arr[0])-2;//减二的原因是下标为0 1 2 3...,且字符串末尾是\0;
// int right = strlen(arr1)-1;//strlen遇到\0就停止了 计算字符串长度
// while (left<=right)
// {
// arr2[left] = arr1[left];
// arr2[right] = arr1[right];
// printf("%s\n", arr2);
// //休息一秒
// Sleep(1000);//1000毫秒
// system("cls");//执行系统命令的一个函数-cls-清空屏幕
// left++;
// right--;
// }
// printf("%s\n", arr2); //使最后一次显示保留
// return 0;
//}
#include <stdio.h>
#include <string.h>
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0;i < 3;i++)
{
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password, "abc123456") == 0)//等号不能用来比较两个字符串是否相等;应该使用一个库函数-strcmp
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (3 == i)
printf("三次密码均错误,退出程序");
return 0;
}