c语言drop函数 dropout函数

C语言问题!请进!

#include "graphics.h"

彭泽网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联建站于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

#include "stdlib.h"

#include "stdio.h"

#include "fcntl.h"

#include "dos.h"

union REGS r;

struct MOUSE{

int getit;

int x1;

int y1;

int x2;

int y2;

}ms;

void MSB(float,float,float,float,int,int,int,int,int);

void mouse_drop(struct MOUSE *in);

/*定义鼠标拖动的函数,通过鼠标的按下、放开来选定一个矩形区域*/

int data_processor(struct MOUSE m,float *x0,float *x1,float *y0,float *y1);

/*将鼠标选定的区域转化成MSB集的区域*/

void mouse_IQR(int *num,int *bx,int *cx,int *dx)

{/*调用鼠标的中断,在这里定义函数让下面一些函数调用,以减少编程的重复,

在这里,通过int86函数(在dos.h里)调用中断,鼠标的中断号为:33h */

r.x.ax=*num;

r.x.bx=*bx;

r.x.cx=*cx;

r.x.dx=*dx;

int86(0x33,r,r);

*bx=r.x.bx;

*cx=r.x.cx;

*dx=r.x.dx;

*num=r.x.ax;

}

int init_mouse()

{

/*初试化鼠标,查询鼠标驱动有没有安装,功能号为 0 */

int num=0;

mouse_IQR(num,num,num,num);

if(num!=-1)

return 1;

else return 0;

}

void mouse_show();

void mouse_position(int *x,int *y)

{/*鼠标在屏幕中所处的位置*/

int button=0,num=3;

mouse_show();

mouse_IQR(num,button,x,y);

}

void mouse_hide()

{/*隐藏鼠标光标*/

int num=2;

mouse_IQR(num,num,num,num);

}

void mouse_show()

{/*显示鼠标光标*/

int num=1;

mouse_IQR(num,num,num,num);

}

int mouse_click(int k)

{/*查询鼠标是使用左键(返回1)还是右键(返回2)*/

int bx=0,num=3;

mouse_IQR(num,bx,num,num);

return(bxk);

}

void waiton(int buttom)

{/*等待鼠标动作*/

if(buttom==1)

while(mouse_click(1));

if(buttom==2)

while(mouse_click(2));

}

int mousexy(int x1,int y1,int x2,int y2)

{/*查询鼠标是否在区域内*/

int x,y;

mouse_position(x,y);

if(xx1xy1yL||m-1e10) break;

x=xx;

y=yy;

}

color=n%16;

putpixel(x1+i,y1+j,color);

}

}

}

void mouse_drop(struct MOUSE *in)

{

char out[20];

int x,y;

int oldx,oldy;

struct MOUSE r;

r=*in;

setwritemode(1);

setlinestyle(USERBIT_LINE,0x7777,1);

setcolor(15);

if(r.getit==1)

{

mouse_hide();

rectangle(r.x1,r.y1,r.x2,r.y2);

mouse_show();

}

mouse_position(x,y);

r.x1=x;

r.y1=y;

oldx=x;

oldy=y;

r.getit=1;

mouse_hide();

rectangle(x,y,x,y);

mouse_show();

while(mouse_click(1)) {mouse_position(x,y);

if(oldx!=x || oldy!=y){

mouse_hide();

rectangle(r.x1,r.y1,x,y);

rectangle(r.x1,r.y1,oldx,oldy);

mouse_show();

oldx=x;

oldy=y;

}

if(mouse_click(2)){

r.getit=0;

mouse_hide();

rectangle(r.x1,r.y1,oldx,oldy);

mouse_show();

waiton(2);

break;}

}

if(r.getit==1){

r.x2=x;

r.y2=y;

if(x==r.x1 r.y1==y)

r.getit=0;

else

r.getit=1;

}

setlinestyle(SOLID_LINE,0,1);

*in=r;

waiton(1);

setwritemode(0);

setmouse(0,0,getmaxx(),getmaxy());

}

int data_processor(struct MOUSE m,float *x0,

float *x1,float *y0,float *y1)

{

float d1,l1,d2,l2,d,l;

float xx0,xx1,yy0,yy1,x,y;

d1=*x1-*x0;

l1=*y1-*y0;

d2=637;

l2=477;

xx0=m.x1;

xx1=m.x2;

yy0=m.y1;

yy1=m.y2;

if(xx0==xx1 || yy0==yy1) return(0);

if(xx0xx1)

{x=xx0;

xx0=xx1;

xx1=x;

}

if(yy0yy1)

{x=yy0;

yy0=yy1;

yy1=x;

}

d=1;

l=1;

x=*x0;

y=*y0;

*x0=x+(xx0-d)*d1/d2;

*x1=x+(xx1-d)*d1/d2;

*y0=y+(yy0-l)*l1/l2;

*y1=y+(yy1-l)*l1/l2;

if(*x0==*x1 || *y0==*y1)

return(0);

else

return(1);

}

不懂再问!

c语言的问题!!!急求!!

几个问题,需要注意:

1.

char temp=fgetc(fp);

这个只对了一个字符,后面的char指针 ch, 指向的是一个字符,而不是一个字符串,因此不能比较;而且此时文件的位置指向的最尾处,字符temp;里面啥都没有(或者说是一个结尾符)

2. 字符串的比较:

if(ch=="create schema;")

有问题,除了上面说的此时ch的内容肯定不会和create scheme;相同,c语言的字符比较一般是:

if(strcmp(ch,"create schema;"))

因为字符串的比较,长度和结尾是一个大问题,因此为了安全甚至用strncmp

3. 其他一些问题, 文件读取完毕后,应该fclose;字符串比较的大小问题是否要考虑? 用户输入的保护(用户不小心乱输入过长的字符串等。。)

4. 针对1~3, 简单的修改了一下,确保你的运行,其余的自己酌情考虑吧。。。

#include string.h

...

void choose()

{

FILE * fp;

fp=fopen("creat_schema.txt","r+");

int i=0;

char c;

do

{

c=getchar();

putc(c,fp);

}

while (c!=';');

rewind(fp);

/*

char temp=fgetc(fp);

char * ch=temp;

*/

char temp[100];

fgets(temp, 100, fp);

char *ch = temp;

fclose(fp);

/*

if(ch=="create schema;")     create_schema();

else if(ch=="create table;")     create_table();

else if(ch=="drop schema;")    drop_schema();

else if(ch=="drop table;")    drop_table();

else if(ch=="alter table;")    alter_table();

*/

if(strcmp(ch,"create schema;"))     create_schema();

else if(strcmp(ch,"create table;"))     create_table();

else if(strcmp(ch,"drop schema;"))    drop_schema();

else if(strcmp(ch,"drop table;"))    drop_table();

else if(strcmp(ch,"alter table;"))    alter_table();

else

{

printf("ch = %s\n", ch);

printf("error!\n");

exit(0);

}    

}

c语言编程题

#include stdio.h

/* 入参一:需要做处理的全字串 

* 入参二:需要删除的字串

* 返回值:经过处理后的字串 

* 要求是指针处理 如果可以使用strlen和memcpy等会更容易理解

*/

char *myf_delsubstr(char *str_all, char *str_drop)

char *all = str_all;   //临时指针 指向全字串

char *drop = str_drop; //临时指针 指向待删除字串

char *tmp = NULL;      //临时指针 后面处理字串时使用

static char out[1024] = {0}; //静态字串 作为返回值

char *u = out;         //临时指针 指向返回的字串

int drop_len = 0;      //待删除字串的长度

//获取待删除字串的长度

while ('\0' != *drop)

{

drop++;

drop_len++;

}

//在获取长度时drop这个指针的指向已被改变 重新赋值

drop = str_drop;

/* 双层嵌套循环

* 第一层循环遍历全字串直到找到可能存在待删除的字串停止

* 第二层循环遍历待删除字串 并与当前的全字串对比 一旦发现完整匹配 越过(删除)该字串

*/

while ('\0' != *all)//直到全字串结尾

{

if (*all == *drop)//发现第一个和待删除字串的第一个字符相等 准备进入二层循环排除或证明怀疑

{

tmp = all;//临时指针指向当前匹配的字串的首部

while ('\0' != *drop)//直到待删除字段结尾

{

tmp++;//每次循环临时全字串和drop字串要往后偏移一位

drop++;//每次循环临时全字串和drop字串要往后偏移一位

if (*tmp != *drop)//一旦发现其中一个字符不相等 排除怀疑

{

break;

}

}

if ('\0' != *drop)//如果还未检查到字串尾就出来了肯定是排除了怀疑

{

*u = *all;//既然排除怀疑那就把当前字符赋值到带返回的字串out中

u++;//赋值后要往后偏移

drop = str_drop;

}

else//证实了怀疑

{

all += drop_len;//全字串越过待删除的字段长度

drop = str_drop;//指针的指向已被改变 重新赋值

continue;//全字串中可能不止出现一次待删除的字串 继续全字串的检查

}

}

else

{

*u = *all;//既然不是待删除字符那就把当前字符赋值到带返回的字串out中

u++;//赋值后要往后偏移

}

all++;//既然是循环整个全字串检查 检查完一个字符后指针要往后偏移一位

}

return out;//u只是指向out这个字串的临时指针 我们返回的还是out本体

}

int main(int argc, char *argv[])

{

char aa[1024] = {0};

char bb[512] = {0};

printf("输入一个字串:\n");

scanf("%s", aa);

printf("输入需要删除的字串:\n");

scanf("%s", bb);

char *kk = myf_delsubstr(aa, bb);

printf("处理后的字串:\n%s\n", kk);

return 0;

}

输入一个字串:

我觉得你是不可能爱上我的因为我是一个男孩子

输入需要删除的字串:

处理后的字串:

觉得你是不可能爱上的因为是一个男孩子

求c语言做的俄罗斯方块,只要能运行成功,就给分。

C语言实例教程:俄罗斯方块的编写

/*

先写原理:

本次的俄罗斯方块代码出其的简单,比我去年写的四十几K要小得多

实际上核心代码只有3-4K,而且很容易理解,适合有一点C语言基础并对此

有兴趣的人.

这前面只粗略讲解核心算法:

这里把游戏的关键设计放在三个盒子和一个坐标上:

大盒子:一个两维数组,记录着方块点阵的开与关(把游戏的舞台想像

成一个点阵),在下面也把这个东西称为地图

两个5*5小盒子:两维数组,一个盛放着正在下落的方块,一个盛放在

下一个下落的方块(即next),当然这两个也必须想像成一个点阵:如长条

的点阵为:

00000

00100

00100

00100

00100

现在你只要有这么一个概念:一个不断定时下落的小盒子从大盒子顶

部下降到底部,之后再将next盒子放在下落盒子,再进行下一轮的下落...

中间的控制等尚不要太着急.

现在面临着一个问题:

下落的盒子和地图之间要怎么联系起来?

一个好的方法是再定义一个坐标:x,y,保存着小盒子左上角在地图上对应

的下标(位置),即当x = 0, y = 0时,小盒子处于地图的左上部.如此,当

小盒子需要移动时,即只须要改变x,y的值.

现在说说旋转.

小盒子保存着当前下落形状的点阵,那么旋转就只须要将这个点阵旋

转90度:例如:

00000 00000

00100 00000

00100 - 01111

00100 00000

00100 00000

这一点实现起来还是不太难的.

判断碰撞

通常这种情况只须要在有移动小盒或旋转盒子时发生:也即点阵非空

是互斥的,当小盒要向下移(x++)时,如果小盒里的点阵与地图上的点阵(非

空的地方)重叠,则不能下移,(卡住了),旋转则转换后的形状与地图有冲

突则要放弃旋转.

到了这里,你应该有一个大概的了解了,至于怎样在屏幕上画出来,这

个是比较简单的,下面的代码会慢慢与你解释.

*/

/*

平台:DOS+TC2.0

*/

#include stdio.h

#include stdlib.h

#include bios.h /*这里须要读取系统运行时间来作为定时器*/

#include graphics.h /*很不幸,TC2的简单图形,让我放弃了用*/

#include conio.h /*win32+openGL来讲解.*/

#define MAX_X 14 /*可见最大X*/

#define MAX_Y 21 /*可见最大Y*/

/*我们定义了最大的可见X和Y,那么即还有不

可见的部分,事实上地图(大盒子)里的左右

两侧和底部各两行都被1填充,这样大大简化

出界的判断,事实上,在本例中没有这样的

代码,因为旁边有一圈1阻止小盒子越出大

盒子的按制范围

*/

#define MAX_C 7 /*最大种类,这个无须解释*/

#define KEY_UP 'w' /*定义上下左右按按键*/

#define KEY_DOWN 's'

#define KEY_LEFT 'a'

#define KEY_RIGHT 'd'

#define KEY_ESC 27 /*退出*/

typedef int BOOL;

#define FALSE 0

#define TRUE 1 /*这几个TC中没有...自己定义一下吧:)*/

/*时钟结构*/

typedef struct { /*时钟结构*/

BOOL enabled; /*时钟是否开启*/

unsigned int intervel; /*定时间隔*/

unsigned int lasttime; /*这个属于内部使用变量*/

} Timer;

/*

*现在进入了编程的初质阶段

*在开始处我会写出所有的函数原形,以及它们的作用

*main函数在程序的最后,你可以在这里看到整个游戏的组织架构

*很好,它只有几十行,并且非常容易理解,当然,还是先看一下函数原形

*及解释

*/

/******************************************************\

* 函数原形及说明 *

\******************************************************/

/*以下三个函数可以参照Timer结构体.在函数声明后面*/

int GetTickCount(); /*返回电脑或操作系统运行逝去的时间*/

/*在win32环境下已包含在windows.h里边,返回的是4byte*/

/*在DOS(本代码)环境下,要自己编写,使用到BIOS.h内容*/

int setTimer(Timer *t, unsigned int intv, BOOL en);

/*设置时钟t,参数分别为时钟指针,时间间隔,是否活动*/

/*时间间隔,win32下为毫秒,DOS下为1/18秒(有点低)*/

BOOL testTimer(Timer *t); /*测试时钟t是否到达定时时间*/

/*如下面这段代码:*/

/*

setTimer(t, 1, 1); 设置1个单位的间隔

while(1) {

if(testTimer(t)) printf("Active!\n");

}

将会定时(1个单位)在屏幕上打印Active!

一般来说testTimer必须放在循环中反复执行,激活时返回1

*/

void render(void); /*唯一的绘图函数*/

/*注意,此函数重画整个地图,根据地图中的点阵,以及根据

小盒在地图的中坐标在恰当位置画出小盒子*/

/*DOS的图形当然是很低的,但,全屏绘图在这里还是过得去

的,我用的是双缓冲,交换绘图,这样感觉好点*/

void initMap(void); /*初始化地图(大盒子)*/

/*之前提到过在这个两维数组中有一圈为1的东西来阻止

小盒子出界,这就是生成这一圈的函数*/

void newGame(); /*新建一个游戏*/

/*这个函数初始化一几个时钟和建造第一个下落的小盒子*/

/*当然建造完后要生成一个个的预览*/

void rotateBox(int box1[5][5], int box2[5][5]);

/*核心函数成员,把box1逆时针旋转90度,并保存到box2中*/

void rebuidNext();

/*核心函数成员,生成下一个方块*/

int drop();

/*核心函数成员,将下落的盒子向下移(实际上增加下落盒

子的Y值而已,当然要判断是否与地图点阵重叠*/

/*与地图重叠,无法完成下落操作,返回0*/

void putBox();

/*在这之上,下落的盒子与地图之前是独立的两个两维数*/

/*当下落失败后,小盒子要回到顶端再次重新执行下落,这*/

/*时原来的盒子内容当然就要变成地图上的内容了,putBox

就是将下落盒子的内容根据XY写到地图上*/

void clear();

/*这个函数在下落失败并putBox后执行,扫描整个地图*/

/*清除掉满行的点阵,具体细节在函数内讲*/

int move(int dir);

/*左右移动下落盒子,dir指出向左还是向右,这个与drop

是一样的*/

int test(int mx, int my, int box[5][5]);

/*这个比较重点,判断box在mx,my为坐标上,与地图上的

非空点阵是否有重叠.很通用的一个函数*/

int rotate();

/*旋转下落的盒子,当然如果转了之后与地图有冲突,会

取消转动,返回0,但返回的值好像没什么用~*/

int newfall();

/*创建下落元素,把"下一个"预览的内容复制到下落盒子*/

/*并将下落的盒子移动到地图顶部,当然这个过程,如果顶

部有冲突,会返回0,这时说明已经满了...gameOver*/

int main();

/*终于到了最后的主函数,在这里可以看到整个游戏的架*/

/*构,包括游戏主循环,键盘处理等...*/

/******************************************************\

* 变量区 *

\******************************************************/

/*在上面的说明中,可能会有一些蒙,因为可能对所用到的实际变量没

*有了解

*/

int map[MAX_Y+4][MAX_X+4]; /*地图\大盒子...MAX_X,Y是可见面积*/

/*我已说过需要在外面布两圈"卫兵"*/

int curbox[5][5]; /*当前下落的盒子*/

int curx, cury; /*保存着当前活动盒子在地图上的位置*/

int nextbox[5][5]; /*保存着下一个形状的盒子*/

/*以上就是这么几个盒子和坐标了*/

/*这里列出了标准七种俄罗斯方块图形点阵,用到时它们会被复制到相*/

/*应的盒子...:)*/

int box[MAX_C][5][5] = { /*MAX_C(7)种预定义的盒子*/

{

{0,0,0,0,0},

{0,0,0,0,0},

{1,1,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,0,1,0,0},

{0,1,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,1,1,0,0},

{0,0,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,0,1,1,0},

{0,1,1,0,0},

{0,0,0,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,1,1,0,0},

{0,0,1,0,0},

{0,0,1,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,0,1,1,0},

{0,0,1,0,0},

{0,0,1,0,0},

{0,0,0,0,0}

},

{

{0,0,0,0,0},

{0,0,1,1,0},

{0,0,1,1,0},

{0,0,0,0,0},

{0,0,0,0,0}

}

};

/******************************************************\

* 时钟 *

\******************************************************/

/*时钟部分也非常理解的,一个用到设置时钟,一个用来测试时钟激活态*/

Timer tDown; /*正常下落定时时钟intervel会比较大*/

Timer tFast; /*按KEY_DOWN时使用的快速下落*/

int speed = 13; /*控制下落时间间隔*/

#define FAST_INTV 1 /*快时钟的间隔*/

int GetTickCount() { /*读取BIOS时钟*/

int ret;

ret = peek(0x0,0x46e); /*实际上读取了内存0:046e处的内容*/

ret = 8; /*这个地方是$%#$^$%^*/

ret += peek(0x0,0x46c); /*太多新的东西了,找点书看一看吧*/

return (ret);

}

int setTimer(Timer *t, unsigned int intv, BOOL en) {

t - enabled = en; /*设置一个时钟罗*/

t - intervel = intv;

t - lasttime = GetTickCount(); /*lasttime记录的是上一个*/

/*tickcount返回的东西*/

/*这样当再一次测试时间时新的tickcount产生了

它来减去上一次的tickcount就得出了一个时间

间隔,这个就可以和intervel比较从而得出是否

激活了

*/

return 0;

}

BOOL testTimer(Timer *t) { /*在上面6行的地方解释了:)*/

unsigned int tmp, dt;

if (!(t - enabled)) return FALSE;

tmp = GetTickCount();

dt = tmp - (t - lasttime);

if(dt = t - intervel) {

t - lasttime = tmp;

return TRUE;

}

return FALSE;

}

/******************************************************\

* 渲染部分 *

\******************************************************/

/*提供render更新整个屏幕*/

/*关于这个函数,要说的东西还是比较多,为了追求漂亮和编译*/

/*时的灵活性,这个函数被写得颇为冗长...*/

/*现在写一下本游戏图形的东西...使用TC2的Graphics我也不

太乐意,毕竟它本身已过时,但鉴于实在简单实用,它用来教学

再合适不过,这也是教学总是用TC的原因,老师们不喜欢让学

生问一些让他们掌握起来也困难的东西...*/

/*这里我使用了VGAMED模式,而不是 VGAHI,因为VGAMED有两个

页(可以想像成缓冲),这样可以用来做到不闪动画.即:在后台

页绘制图形,完成后再显示出来.

这里用到了两个函数:

setactivepage(1 | 0) 参数只能是1或0,选择绘图页,例如选

择了1后,以后所有的绘图动作将画到页1上.

setvisualpage(1 | 0) 这个叫做选择可见页,即选择在屏幕上

显示页面1还是0

*/

void render(void) {

int x, y;

static int cPage = 0; /*当前页,换页用*/

#define STARTX 50 /*定义几个常量*/

#define STARTY 0

#define LEN 18

setactivepage(cPage=(cPage == 0?1:0)); /*选择页*/

cleardevice(); /*清屏*/

setcolor(15);

rectangle( STARTX + LEN * 2 - 2,

STARTY + LEN * 3 - 2,

STARTX + LEN * (MAX_X - 2) + 2,

STARTY + LEN * (MAX_Y - 2) + 2);

/*用白色画一个外框*/

setfillstyle(SOLID_FILL, 5);

for(y = 3; y MAX_Y - 2; y++) { /*画地图 */

for(x = 2; x MAX_X - 2; x++) {

if(map[y][x]) {

rectangle( x * LEN + STARTX,

y * LEN + STARTY,

x * LEN + STARTX + LEN,

y * LEN + STARTY + LEN);

bar( x * LEN + STARTX + 1,

y * LEN + STARTY + 1,

x * LEN + STARTX + LEN - 2,

y * LEN + STARTY + LEN - 2);

}

}

}

/*绘图操作就不要作太复杂的介绍了,这只写作用*/

/*以上段,根据地图上的点阵情况将地图反映到屏幕上*/

当前题目:c语言drop函数 dropout函数
本文地址:https://www.cdcxhl.com/article4/dodcooe.html

成都网站建设公司_创新互联,为您提供软件开发企业建站建站公司移动网站建设网站内链商城网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设