分支和循环(2)笔记——比特公开课

该文展示了C语言中处理用户输入、字符串比较、循环结构以及系统命令调用的实例。主要内容包括使用scanf和getchar处理输入,strcmp函数比较字符串,for和while循环的运用,以及模拟用户登录情景的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
 } 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值