| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9226 人关注过本帖
标题:c语言如何实现模拟键盘输入?
只看楼主 加入收藏
耨人
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-4-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
c语言如何实现模拟键盘输入?
是这样的,我在做c语言程序设计,是海龟作图问题。源代码如下:


#include<stdio.h>
void print(int [][51]);
void move(int [][51],int,int,int);
void yidong(int [][51],int,int,int);

int x=0,y=0;  //海龟位置坐标,为全局变量,初始在左上角。
int main()
{
    int step[51][51];
    int i,j,a=1,gostep=1,direct=1,record=1;
    for(i=0;i<=49;i++)
      for(j=0;j<=49;j++)
          step[i][j]=0;
      for(;;){         printf("a=%d,gostep=%d,direct=%d,record=%d,x=%d,y=%d\n",a,gostep,direct,record,x,y);      
       printf("请输入 a ");//(输入“1”代表不记录移动痕迹,“2”代表记录移动痕迹;“3”代表笔尖向左转,“4”代表笔尖向右转,“5”代表开始移动gostep步
       scanf("%d",&a);
      
       if(a==2) record=1;
       if(a==1) record=0;
       if(a==4)
       {
            direct++;
            if(direct==5) direct=1;
            continue;
       }
       if(a==3)
       {
          direct--;
          if(direct==0) direct=4;
          continue;
       }
      if(a==5)
      {   printf("请输入 gostep");
          scanf("%d",&gostep);
          move(step,gostep,direct,record);
          continue;
      }
      if(a==6)
        print(step);
      if(a==7)
      {printf("请输入 gostep");
          scanf("%d",&gostep);
          yidong(step,gostep,direct,record);
          continue;
      }
   
      if(a==9)
        return 0;
      }
}
//打印海龟踪迹,显示在屏幕上
void print(int s[][51])
{
    int i,j;
    for(i=0;i<50;i++){
        for(j=0;j<50;j++){
            printf(s[i][j]==0? "-":"*");
        }
    printf("\n");
    }
}

//海龟移动,i,j,k分别对应:gostep,direct,record
void move(int t[][51],int i,int j,int k)
{
    int xmove,ymove,num;
    if(j==1)
    {
        xmove=1;ymove=0;}
    if(j==2)
    {
        xmove=0;ymove=1;
    }
    if(j==3)
    {
        xmove=-1;ymove=0;
    }
    if(j==4)
    {
        xmove=0;ymove=-1;
    }
    for(num=0;num<i;num++)
    {        
        if(x<0||x>50||y<0||y>50)
        {
             printf("the place is danger ,you are died\n");
            return;
        }   
        t[y][x]+=k;
        x=x+xmove;
        y=y+ymove;
    }
}


void yidong(int t[][51],int i,int j,int k)
{
    int xmove,ymove,num;
    if(j==1)
    {
        xmove=-1;ymove=1;}
    if(j==2)
    {
        xmove=1;ymove=1;
    }
    if(j==3)
    {
        xmove=1;ymove=-1;}
    if(j==4)
    {
        xmove=-1;ymove=-1;
    }

    for(num=0;num<i;num++)
    {        
        if(x<0||x>50||y<0||y>50)
        {
             printf("the place is danger ,you are died\n");
            return;
        }   
        t[y][x]+=k;
        x=x+xmove;
        y=y+ymove;
    }
}




但是每次都要手动输入一大堆数字,很麻烦。请问如何实现模拟键盘输入,只要每次运行就会自动输入以下数字:
1,4,5,5,3,2,5,50,  1,4,5,5,4,2,5,50,  1,4,5,10,4,5,25,2,4,5,10,  1,5,5,4,2,5,22,  3,5,10,  3,5,44,  3,5,10,  3,5,22,   1,3,5,12,2,5,5,4,5,20,3,3,5,40,4,4,5,20,3,5,1,7,12,4,4,7,12,4,7,13,6。
搜索更多相关主题的帖子: void include yidong 源代码 
2012-04-01 16:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
从文件中读入数据

授人以渔,不授人以鱼。
2012-04-01 16:47
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:10 
可以在Debug时直接给变量赋初值,在Release时由用户输入

模拟键盘是keybd_event,但LZ的想法有点偏,此问题不需要模拟键盘

为游戏狂~~!!    大家努力编哈!
2012-04-01 16:55
耨人
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-4-1
收藏
得分:0 
回复 3楼 smallmoon521
那要用什么做啊?我是初学者,不懂啊!!现在万分困惑
2012-04-01 17:12
耨人
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-4-1
收藏
得分:0 
回复 2楼 TonyDeng
可不可以写一段代码我看看啊?我根本不知道该如何操作啊
2012-04-01 17:26
耨人
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-4-1
收藏
得分:0 
回复 3楼 smallmoon521
比如我输入回车键的话, 这样写对吗? keybd_event(VK_RETURN 0D,0,0,0);
不知道为什么这样写第一次编译通过了,之后就一直有错误
2012-04-01 17:33
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
回复 4楼 耨人
我现在怀疑这个源码是不是你自己写的了
否则你应该懂我在说什么的
简单点说:
int a;
scanf("%d",&a);
这样是手动输入,如果你测试时每次都要输入4,直接写成:
int a = 4;
就好了。
明白了吗?

为游戏狂~~!!    大家努力编哈!
2012-04-01 18:41
耨人
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-4-1
收藏
得分:0 
回复 7楼 smallmoon521
a是无法直接赋值的啊,我就是用a来控制海龟移动的啊
2012-04-01 19:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用耨人在2012-4-1 17:26:55的发言:

可不可以写一段代码我看看啊?我根本不知道该如何操作啊
把scanf("%d",&a)改为每次从文件中读入一个数字,不用键盘输入。

授人以渔,不授人以鱼。
2012-04-01 20:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()函数的本质,是从一个叫stdin的文件中读取数据,即fscanf(stdin,"%d",&a),现在你不要用stdin,改用普通的文本文件fp,fscanf(fp,"%d",&a)就自动从文件fp中读入一个数,等效于你在键盘上预先键入了所有数据(所谓缓存就是这个道理),然后程序依次读入。

[ 本帖最后由 TonyDeng 于 2012-4-1 21:39 编辑 ]

授人以渔,不授人以鱼。
2012-04-01 20:54
快速回复:c语言如何实现模拟键盘输入?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026230 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved