飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2119|回复: 0

[C/C++] C语言--学习笔记--第八课

[复制链接]
  • TA的每日心情

    2019-4-15 08:38
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-4-30 13:24:46 | 显示全部楼层 |阅读模式
    [C] 纯文本查看 复制代码
    首先是if问题:视频代码:
    main()
    {
            int i;
            scanf("%d",&i);
            if(i==5)
            {
                    printf("i = %d",i);
            }else if(i++ == 6)
            {
                    printf("i = %d",i);
            }else if(i++ ==7)
            {
                    printf("i = %d",i);
            }else if(i++ == 8)
            {
                    printf("i = %d",i);
            }
            printf("\ni == %d",i);
    }
    一样过一个else之后就会直接执行下面的printf;
    ===========================================
    自己写的代码:
    main()
    {
            int i;
            scanf("%d",&i);
            if(i++ == 5)
            {
                    printf("i = %d",i);
            }
            else
            {
                    if(i++ == 6)
                    {
                            printf("i = %d",i);
                    }
                    else
                    {
                            if(i++ == 7)
                            {
                                    printf("i = %d",i);
                            }
                    }
            }
            printf("\ni == %d",i);
    }
    输入4,结果直接i == 7;结论if()  判断()里面的语句,是否成立然后根据条件在执行,但是if()里面的语句也会执行;如果if(++)里面有++的话,那么++是会执行的,所以输入4,结果为7,经过了三个++;输入6之后因为5后面有++所以i已经变成7了,不会执行下面的语句,直接打印最后一个printf;
    ========================================================================================
    main()
    {
            char c;
            int t = 1;
            while(t)
            {
                    scanf("%c%c",&c,&c+1);
                   /* c = getch(); */
                    if(c == 97)
                    {
                            t = 0;
                    }
                    else
                    {
                            printf("%d\n",c);
                    }
            }
    }
    
    输入一个数只要不是a就打印出来,scanf();输入的数据和回车一起打印出来,c=getch();只接受输入的字符;  这样写确实容易出问题,&c和&c+1有可能会占用t的空间;输出有不确定性;
    
    main()
    {
            char c[2];   /*和这里申请2、4个字节有关系???*/
            int t = 1;
            printf("%u %u\n",c,&t);
            while(t)
            {
    		printf("Please input num: ");
                    scanf("%c%c",c,c+1);
                   /* c = getch(); */
                    if(*c == 97)
                    {
                            t = 0;
                    }
                    else
                    {
                            printf("c = %d\n",*c);
                    }
            }
    }
    
    疑问?
    按照视频改成这样也会有问题!!输入多个回车之后在输入任何数也是得10;
    
    main()
    {
            char c[4];
            int t = 1;
            printf("%u %u\n",c,&t);
            while(t)
            {
                    printf("Please input num: ");
                    scanf("%c",c);
                    *(c+1) = getch(); 
                    if(*c == 97)
                    {
                            t = 0;
                    }
                    else
                    {
                            printf("c = %x %x\n",*c,*(c+1));
                    }
            }
    }
    
    输出结果:
    C:\tc>test
    65498 65502
    Please input num: 456
    c = 34 31
    Please input num: c = 35 32
    Please input num: c = 36 33
    输入顺序456(回车)按1 输出c = 34 31 ;按2 输出c = 35 32 ;按3 输出c = 36 33;
    ------------------------------------------
    1、
    getch()  从键盘缓冲区的\n开始读取数据;
    scanf()  从键盘缓冲区的首字节开始读取数据,\N(0A)结束;
    2、
    getch() 输入的数据没有回显;
    --------------------------------------------
    getchar();
    输入456回车,直接全部输出34 35 36 a;
    
    =============================================================
    #include <stdio.h>
    
    
    main()
    {
            char c[4];
            int t = 1;
            printf("%u %u\n",c,&t);
            while(t)
            {
    		clrscr();
                    printf("Please input num: ");
                    scanf("%c",c);
                    getchar();
                    printf("%c\n",*c);  
                    printf("Do you keep on? 'y' or 'n':");
                    scanf("%c",c+1);
                    getchar();
                    if(*(c+1) != 'y' )
                    {
                            t = 0;
                    }
            }
    }
    
    这个是用getchar()接收scanf()的回车键;功能:输入一个数,显示,然后判断是否继续;
    ==============================================================================
    main()
    {
            int i;
            scanf("%d",&i);
            printf("i = %d\n",i);
            if(i < 0)
            {
                    i = -i;
            }
            printf("|i| = %d",i);   /* abs(i)是求绝对值的函数*/
    }
    
    i的绝对值;三路运算符:(判断条件) < A : B  如果条件成立输出 A,条件不成立输出B;(i<0)?-i : i
    =====================================================================================
    main()
    {
            gotoxy(20,10);
            printf("Hello,World!");
    }
    gotoxy();。getch;如果缓冲区为空,就取第一个字符;如果缓冲区不为空,就从回车键之后开始取;
    ===================
    main()
    {
            char c[4] = {0};
            char t = 1;
            while(t)
            {
                    if(*c == 'p')
                    {
                            t = 0;
                    }
                    else
                    {
                    *c = getch();
                    *(c+1)=getch();
                    printf("c = %x c+1 = %x\n",*c,*(c+1));
                    }
            }
    }
    获取上下左右键的十六进制数值:向上:48  向下:50  向左:4b  向右:4d
    
    #include <stdio.h>
    main()
    {
            char c[4] = {0};
            int i = 5;
            int j = 5;
            char t = 1;
            while(t)
            {
                    clrscr();                                                             /*清零函数和*都要在循环里面??*/
                    gotoxy(j,i);
                    printf("*");
                    gotoxy(j,i);          /*这句代码是把光标放到*号的下面*/
    
                    *c = getch();        /*如果换成getcher()就光标就不动*/
                    if(*c == 0x48 )
                    {
                        i = i == 1 ? 25:i-1; 
                    }
                    else if(*c == 0x50 )
                    {
                       /* i = i==25 ?1:i+1;*/                                                 /*这里还有点想不太明白,取余数如果是25余数就为0;数据好像对0没有做处理???*/
                         i= i++ % 25;
                    }
                    else if(*c == 0x4b)
                    {
                        j = j== 1 ? 80 :j-1;
                    }
                    else if(*c == 0x4d )
                    {
                       /* j= j==80 ? 1:j+1;*/
                        j = j++ % 80;
                    }
    
                    else if(*c == 'p')
                    {
                            t = 0;
                    }
            }
    }
    
    

    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表