Ⅰ c语言或者C++鼠标点击怎么触发下面这个事件
主要思路如下:
“取车”按钮:
判断当前是否有车(总车位不等于300),没车的时候提示并返回;
有车时,判断1层是否有车(1层车位不等于140),1层有车则1层车位数+1,否则2层车位数+1;
“存车”按钮类似。
伪代码如下:
voidbtnGet_click(objectsender,evente)//“取车”按钮点击方法
//VS的话,方法名称一般可以通过界面双击控件自动生成
{
if(iParkingNum==300)//总车位为300(没车)
{
MessageBox.Show("没车提示","提示标题");
return;
}
if(iLv1ParkingNum<140)//1层车位小于140(有车)
iLv1ParkingNum+=1;//1层车位+1
else
iLv2ParkingNum+=1;//2层车位+1
}
voidbtnPut_click(objectsender,evente)//“存车”按钮点击方法
{
if(iParkingNum<1)//总车位为0(车位已满)
{
MessageBox.Show("没车位提示","提示标题");
return;
}
if(iLv1ParkingNum>0)//1层车位大于0(有车位)
iLv1ParkingNum-=1;//1层车位-1
else
iLv2ParkingNum-=1;//2层车位-1
}
以上,有其他问题请追问。
Ⅱ 用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊
Windows
窗体程序是基于消息机制的,所有控件,它的本质都是一个窗体,都是使用
CreateWindows
函数来创建,不过类名,则需要指定为系统预先注册的控件类,比如,你要创建一个按钮控件,就要这样子
CreateWindows(
"BUTTON",
"按钮标题"
),CreateWindows
这个函数你应该用了不少了吧,其余的参数可以参考
MSDN,但是类名我们指定了
“BUTTON”,说明我们要创建一个按钮,每个按钮都有一个唯一的
ID,通过你的消息处理函数,可以知道哪个按钮发生了什么事件,详细讲的话,非常多,你可以参考
MSDN,或者《Windows
程序设计》这本书
。
Ⅲ 如何用c语言实现:a,b,c三个事件,依次进行,每到a时就执行事件1,再到b,再执行事件1,再c,再事件1.
典型的状态机结构,可以去网上找找有关的资料,大概的结构像这样
enum { state_A, state_B, state_C } state = state_A;
while(1)
{
switch ( state )
{
case state_A:
if ( event_A ) // 这里也可以用switch
{
action_1(); // 在某状态下发生某事件执行某个动作,并转入下个状态
state = state_B;
}
else if ( event_B )
{
}
else
{
}
break;
case state_B:
... ...
}
}
根据你的问题补充,可以这样划分状态
准备轮询1号机,等待1号机应答(已经轮询1号机,但1号机未应答),准备轮询2号机,等待2号机应答,准备轮询3号机,等待3号机应答,
或者分成3个状态加一个标志,
轮询1号机,轮询2号机,轮询3号机,加一个有无应答标志,
其实这两种分法没有本质区别。
程序框架大概的样子是这样
switch ( state )
case 准备轮询1号机:
发送轮询1号机的命令
state = 等待1号机的应答;
break;
case 等待1号机的应答;
判断1号机的应答状态,可能是正确、错误、超时,分别处理,并设置状态
正确:
state = 准备轮询2号机
错误:
state = 准备轮询1号机,重试
超时:
state = 准备轮询1号机,重试,具体做什么可以很灵活
Ⅳ c语言键盘事件keybd_event
这段代码没问题,我亲自验证过。
或者你尝试我这段代码,效果应该明显:
#include<Windows.h>
#include<stdlib.h>
#include<stdio.h>
intmain()
{
//模拟Alt+Tab
keybd_event(VK_MENU,0xb8,0,0);//Alt按下
keybd_event(VK_TAB,0x8f,0,0);//Tab按下
while(1);//停住观察
keybd_event(VK_TAB,0x8f,KEYEVENTF_KEYUP,0);//Tab释放
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0);//Alt释放
return0;
}
keybd_event函数模拟了键盘输入。调用该函数会让系统触发WM_KEYUP或者WM_KEYDOWN事件。
函数原型是:
VOIDWINAPIkeybd_event(
_In_BYTEbVk,
_In_BYTEbScan,
_In_DWORDdwFlags,
_In_ULONG_PTRdwExtraInfo
);
Ⅳ C语言中,如何在窗体之间互相调用事件
Form程序的话,最好是把你的逻辑,操作都做成独立的方法,根据需求设定访问权限。
而事件里,仅仅就是调用这些方法而已。
当别的窗体需要使用对应的逻辑时只要写。
Form1 f1=new Form1();
f1.Show();
f1.xxxx();//你的方法。
Form2 form2=new Form2();
form2.Owner=this;
form2.Show();
Form2 里面获取如下
Form1 form1=(Form1)this.Owner;
int i=form1.dataGridView.Rows.Count;//这句就是访问form1的dataGridview1
Ⅵ C语言如何实现随机事件
哎,还没分!!!!
#include <stdio.h>
#include <stdlib.h>
unsigned int get_rand_num_1_5( void )
{
/* 获取随机数,并保证每次获得的不一样 */
srand((unsigned)time(NULL));
unsigned int r=rand();
/* 将随机数变为1-5之间 */
r = 1 + r%5;
return r;
}
int main( void )
{
/* 自动获取的数字 */
int rand_num;
/* 要手动输入的数字 */
int input_num;
while(1)
{
rand_num = get_rand_num_1_5();
printf( "The rand num is %d\n",rand_num );
printf("please input the num :\n");
scanf( "%d",&input_num );
if( input_num == input_num )
{
printf("you are right!\n");
}
else
{
printf( "The rand num is %d\n",rand_num );
printf( "The input num is %d\n",input_num );
printf("you are wrong!!!");
}
}
return 0;
}
Ⅶ C语言是怎样实现鼠标事件控制的可不可以用纯C做
可以,需要调用windowsAPI函数。
头文件windows.h。
简单思路:
通过GetStdHandle获取标准输入句柄。
再通过ReadConsokeInput将输入信息存储到结构体类型INPUT_RECODE变量中。
再通过判断,截取到鼠标电击的事件。
具体API函数、参数、功能还有很多。需要网上找资料可以学。
我这里就简单写一个,鼠标点击控制台任意位置,并在该位置打印字符串。
#include<stdio.h>
#include<windows.h>
intmain()
{
HANDLEhInput=GetStdHandle(STD_INPUT_HANDLE);//获取标准输入设备句柄
INPUT_RECORDinRec;
DWORDres;
COORDp0;
while(1)
{
ReadConsoleInput(hInput,&inRec,1,&res);
if(inRec.EventType==MOUSE_EVENT&&inRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)//鼠标左键
{
p0.X=inRec.Event.MouseEvent.dwMousePosition.X;
p0.Y=inRec.Event.MouseEvent.dwMousePosition.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);
printf("你在这里点击的左键
");
}
}
return0;
}
Ⅷ flag在c语言中是什么
flag在c语言编程中表示变量。
FLAG原本是一个编程指令,常被运用于计算机语言,例如C语言或D语言中,常于用来记载变量的一个参数。
Flag只有1(立起)和0(倒下)两个数值,通常集中存放在内存中固定的区域里。程序在某种状态改变的同时改变flag的值,并在其他操作中通过flag了解状态,并决定接下来的操作。换句话说,flag可以用来帮助程序做复杂条件的判断。
程序举例
int a;
flag:a = 1;
cout << a << endl;
goto flag;
a = 2;
cout << a << endl;
程序执行结果:无限循环输出1
以上内容参考 网络—FLAG
Ⅸ 怎么用c语言写随机事件
随机数的生成可以用rand和srand函数,如:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main( void )
{
int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}
如果你要限制这个随机数的范围,可以用:
6.0*rand()/(RAND_MAX+1.0))
这个表示产生0~6.0之间的一个随机实数。
之前的srand函数一定要执行,否则rand生成的就不是随机的了。
Ⅹ 如何运用C语言实现随机事件
问题1:随机事件的C/C++语言实现。
第1题:产生随机数(完型填空)
(1)函数说明
rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
0<= rand()<=RAND_MAX(32767=216-1)
试问:产生0到100之间的随机数的C表达式是什么?
100*rand()/32767
(2)参考“原型”
#include "iostream.h"
#include "stdlib.h"
#include "time.h" /*需引用的头文件*/
void out_rand()
{
srand(time(0)); //随机种子
for(int i=0;i<10;i++)//产生10个0到100随机数
{
cout<<100*rand()/RAND_MAX<<endl;
}
}
void main()
{
int n;
while(1)
{
cout<<”1----产生随机数; 2----退出系统”<<endl;
cin>>n;
if(n==1) out_rand();
if(n==2) break;
}
}
(3)设计任务(“好”的算法:时间代价——语句、空间代价——占用“内存”)
利用产生随机数的编程技术,产生一个随机系统48个0到99之间的“需求量”随机数,并按间距为10统计各“需求量”区间的数据个数。
#include “iostream.h”
#include “stdlib.h”
#include “time.h” (填空)
void out_rand()
{
int a[48],I,k;(填空)
for(i=0;i<48;i++) a[i]=0;
srand(time(0));
for(i=0;i<48;i++)
{
k=(99-0+1)* rand()/RAND_MAX+0;
a[(k-0)/10]++;
(例子:
k=(199-100+1)* rand()/RAND_MAX+100;
a[(k-100)/10]++;
)
}
for(i=0;i<100;i+=10)
{
cout<<i<<”----“<<i+9<<”的数据个数: “<<a[(i-0)/10](要改)<<endl;
}
}
void main()
{
int n;
while(1)
{
cout<<”1----产生随机数; 2----退出系统”<<endl;
cin>>n;
if(n==1) out_rand();(填空)
if(n==2) break;
}
}
问题2:数据排序的C/C++语言实现。
第1题:起泡法(上推排序法)
1、“原型”(从小到大排序)
#include “iostream.h”
void bubble_sort(int *item,int count)
{
register int I,j;
int t;
for(i=0;i<count-1;i++)
//每一遍后都能将i及其后面的数据中的最小值排在最前面(i处)。
for(j=count-1;j>=I;--j)
if(item[j-1]>item[j])
{t=item[j-1];item[j-1]=item[j];item[j]=t;}
}
void main()
{
int a[]={6,8,3,9,7,4,5,1,2};
bubble_sort(a,9);
for(int i=0;i<9;i++)
cout<<a[i]<<” “;
cout<<endl;
}
2、实践
(1)调试该“原型”,分析其执行功能。
(2)从键盘输入10个“实数”,请用“起泡法”对其进行从大到小并输出。
#include “iostream.h”
void bubble_sort(int *item,int count)
{
register int I,j;
int t;
for(i=0;i<count-1;i++)
for(j=count-1;j>=I;--j)
if(item[j-1]<item[j])
{t=item[j-1];item[j-1]=item[j];item[j]=t;}
}
void main()
{
int a[10];
int i;
for (i=0;i<10;i++)
cin>>a[i];
bubble_sort(a,10);
for(i=0;i<10;i++)
cout<<a[i]<<” “;
cout<<endl;
}
第2题:选择排序法
1、“原型”
#include “iostream.h”
void select_sort(double *item,int count)
{
register int I,j,k;
double t;
for(i=0;i<count-1;i++) //每趟只进行一次交换
{
k=I;
for(j=i+1;j<count;++j)
if(item[k]>item[j]) k=j; //将较小的数排到前面
t=item[k];item[k]=item[i];item[i]=t;
}
}
void main()
{
double b[]={6.8,8.7,3.9,9.6,7.4,4.3,5.2,1.5,2.0};
select_sort(b,9);
for(int i=0;i<9;i++)
cout<<b[i]<<” “;
cout<<endl;
}
2、实践
(1)调试该“原型”,分析其执行功能,并比较其与“起泡法”排序算法的运行时间代价(“最坏”情形)。
(2)从键盘输入10个学生的“英文名”,请用“选择排序法”对其进行从小到大并输出。
提示:C/C++中,比较两个字符串的大小:strcmp(str1,str2),复制字符串:strcpy(str1,str2),头文件是:string.h
//参考答案
#include “iostream.h”
#include “string.h”(填空)
#include “conio.h”
void main()
{
char item[10][21];
int I,j,k;
char t[21];
cout<<”从键盘输入10个学生的英文名:”<<endl;
for(i=0;i<10;i++)
cin>>item[i];(填空)
//排序
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;++j)
if(strcmp(item[k],item[j])>0) k=j;
strcpy(t,item[k]);strcpy(item[k],item[i]);strcpy(item[i],t);
}
//输出
for(i=0;i<10;i++)
cout<<item[i]<<endl;
getche();
}
第3题【《信息管理技术》机试题-条件查询问题】:下列程序的功能是:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum输出到文件OUT13.DAT中。
部分源程序已经给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include <stdio.h>
int cnt,sum;
void writeDat(); //写盘函数的声明
void countValue()
{ }
void main()
{
cnt=sum=0;
countValue();
printf("满足条件的自然数的个数=%d\n",cnt);
printf("满足条件的自然数的和=%d\n",sum);
writeDat(); //调用写盘函数
}
void writeDat() //写盘函数的实现
{
FILE *fp;
fp=fopen("OUT13.DAT","w");
fprintf(fp,"%d\%d\n",cnt,sum);
fclose(fp);
}
////参考答案/////////
void countValue()
{
int i,thou,hun,ten,data;
for(i=5000;i>=1000;i--)
{
thou=i/1000;
hun=i%1000/100;
ten=i%100/10;
data=i%10;
if(thou+hun==ten+data && thou+hun==(data-thou)*10)
变化的是条件!!!参考答案的其他内容都要记下来!!!
{ sum+=i; cnt++; }
}
}
要求:
(1)调试该程序。
(2)用文字说明countValue()“算法”的控制流程。
第4题【《信息管理技术》机试题-出圈问题】:设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能,并调用函数writeDat()把结果p输出到文件JOSE.DAT中。
设n=100,s=1,m=10。
(1)将1到n个人的序号存入一维数组p中;
(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;
(3)重复第(2)步直至圈中只剩下p[1]为止。
注意:部分源程序已经给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include <stdio.h>
#define N 100
#define S 1
#define M 10
int p[100],n,s,m;
void writeDat(void);
void Josegh(void)
{ }
void main()
{
m=M; n=N; s=S;
Josegh();
writeDat();
}
void writeDat(void)
{
int i;
FILE *fp;
fp=fopen("JOSE.DAT","w");
for(i=N-1;i>=0;i--)
{
printf("%4d",p[i]);
fprintf(fp,"%4d",p[i]);
if(i%10==0)
{
printf("\n");
fprintf(fp,"\n");
}
}
fclose(fp);
}
////参考答案/////////
void Josegh(void)
{
int i,j,k,s1,w;
s1=s;
for(i=1;i<=n;i++)
p[i-1]=i;//给每个人编号
for(i=n;i>=2;i--)
{
s1=(s1+m-1)%i;
if(s1==0) s1=i;
w=p[s1-1];
for(j=s1;j<=i-1;j++)
p[j-1]=p[j];
p[i-1]=w;
}
}