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、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;
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;
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 = {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 = {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;
}
}
}
页:
[1]