'; break; }这段代码的问题!因为你把&#"og:type" content="webpage">'; break; }这段代码的问题!因为你把&#" /> '; break; }这段代码的问题!因为你把&#"> c语言光标位置问题_框架_内存溢出

阅读18

c语言光标位置问题,第1张

楼主你好!你是不是发现,每次运行完之后,光标

都会回到首行第一个位置?

原因很简单!

if(in[i]=='\r')

{

in[i+1]='\0';

break;

}

这段代码的问题!因为你把'\r'存入了in[i]之中了!'\r'就是回到该行的第一位置的作用!

如果你可以这样验证,把上面这段代改为下面

if(in[i]=='\r')

{

in[i]='\0';

break;

}

把那个'\r'用'\0'覆盖掉,这样输出的时候,光标就不会回到该行的第一个位置了!我个人认为getch()没什么注意的!因为这个函数

不怎么使用!

大概大学作业里面,叫你写简单的什么密码登陆之类的用到,其他我感觉我不怎么用到!

希望我的回答对你有帮助!

我之前给别人写过一个打地鼠的小游戏,就是用鼠标 *** 作的。发给你参考下。代码很简单。

主要函数我在下方说明了,但更多信息你必须自己百度看,一言两语说不完。

SetConsoleCursorPosition函数可以定位光标位置,也就是文字内容显示的起点。

ReadConsoleInput(HANDLE hConsoleInput,INPUT_RECORD lpBuffer,DWORD nLength,

DWORD lpNumberOfEventsRead)函数可以获取鼠标的 *** 作信息。

调用过上面函数后,lpBuffer由于是传址,所以其地址里的值就包含了鼠标信息。

lpBufferEventType == MOUSE_EVENT //判断是鼠标事件

lpBufferEventMouseEventdwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED//判断是鼠标左键点击

两个判断一起就是鼠标左键点击的判断,其他事件参数你可以自己网上找。

#include <stdioh>

#include <stdlibh>

#include <windowsh>

#include <conioh>

#include <timeh>

#include <stringh>

#include <malloch>

#define gSizek 30//区域大小宽度

#define gSizeg 20//区域大小高度

#define gBegin 3//活动区域起始行

int main()

{

    int t=0,s0,s1,i,j,count=0,fen=0,row=0,clo=0;

    char gameA[gSizeg][gSizek+1],fSave[10]={0};

    SetConsoleTitle("打地鼠");

    HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄

    INPUT_RECORD inRec;

    DWORD res;

    COORD p0;

    p0X=0;

    p0Y=0;

    srand(time(0));

    s0= time(NULL);

    strcpy(gameA[0],"            GAME");

    strcpy(gameA[1],"未命中次数:0,计分:000000");

    for(i=gBegin-1;i<gSizeg;i++)

    {

        for(j=0;j<gSizek+1;j++)

        {

            if(i>gBegin-1 && i<gSizeg-1 && j>0 && j<gSizek-1)

                gameA[i][j]=' ';

            else

                gameA[i][j]=4;

            if(j==gSizek)

                gameA[i][j]=0;

        }

    }

    for(i=0;i<gSizeg;i++)

        printf("%s\n",gameA[i]);

    while (1)

    {

        if(t>=3)

        {

            if(row>0 && clo>0)

                gameA[row][clo]=' ';

            row=rand()%(gSizeg-1);

            clo=rand()%(gSizek-1);

            s0= time(NULL);

            SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);

            if(row<3)

                row=4;

            if(clo<1)

                clo=1;

            gameA[row][clo]=2;

            for(i=0;i<gSizeg;i++)

            {

                //gameA[i][gSizeg+1]=0;

                printf("%s\n",gameA[i]);

            }

        }

        if(count==3)

        {

            p0X=10;

            p0Y=8;

            SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);

            printf("GAME OVER!");

            break;

        }

        s1= time(NULL);

        t=s1-s0;

        ReadConsoleInput(hInput, &inRec, 1, &res);

        if (inRecEventType == MOUSE_EVENT && inRecEventMouseEventdwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键

        {

            if(inRecEventMouseEventdwMousePositionX==clo && inRecEventMouseEventdwMousePositionY==row)

            {

                if(fen==0)

                    fen=1;

                if(fen>999999)

                    fen=999999;

                else

                    fen=fen2;

                sprintf(fSave,"%06d",fen);

                gameA[1][18]=0;

                strcat(gameA[1],fSave);

            }

            else

            {

                count++;

                fen=0;

                gameA[1][11]=count+'0';

            }

            t=4;

        }

    }

    while(1);

    return 0;

}

一、屏幕 *** 作函数

1 clrscr()清除字符窗口函数

2 window()字符窗口函数

3 gotoxy()光标定位函数

4 clreol() 清除光标行尾字符函数

5 insline() 插入空行函数

6 delline() 删除一行函数

7 gettext() 拷进文字函数

8 puttext() 拷出文字函数

9 movetext() 移动文字函数

二、字符属性函数

10 textmode() 文本模式函数

11 highvideo()高亮度函数

12 lowvideo() 低亮度函数

13 normvideo(void);

14 textcolor() 文本颜色函数

15 textattr() 文本属性函数

16textbackground() 文本背景函数

三、 屏显状态函数 17 wherex() 光标处x坐标

函数

18 wherey() 光标处y坐标函数

19 gettextinfo() 获取文本窗口信息函数

2 window()字符窗口函数

功能: 函数window()用于在指定位置建立一个字符窗口。

用法: 此函数调用方式为 void window(int left,int top,int right,int bottom);

说明: 函数中参数left,top为窗口左上角坐标;right,bottom为其右下角坐标。

若有一个坐标是无效的,则window()函数不起作用。一旦该函数调用成功,那么所有定位坐标都是相对于窗口的,而不是相对于整个屏幕。但是建立窗口所用的坐标总是相对整个屏幕的绝对坐标,而不是相对当前窗口的相对坐标。这样用户就可以根据各种需要建立多个互不嵌套的窗口。

此函数的头文件为conioh。

返回值:无

例: 调用这个函数的实现例见3gotoxy()函数的例子中。

gotoxy()光标定位函数

功能: 函数gotoxy()将字屏幕上的光标移到当前窗口指定的位置上。

用法: 这个函数调用方式为void gotoxy(int x,int y);

说明: 括号里x,y是, 光标定位的坐标,如果其中一个坐标值无效(如坐标超界),那么光标不会移动。

此函数在字符状态(有时称为文本状态)下经常用到 ,其相应的头文件为conioh

返回值:无

例: 下面程序建立两个窗口,然后在窗口里显示字符,字符的位置是调用该函数确定的。

#include"conioh>

void border(int startx,int starty,int endx,int endy)

{

register int i;

gotoxy(1,1);

for(i=0;i<=endx-startx;i++)

putch('-');

gotoxy(1,endy-starty);

for(i=0;i<=endx-startx;i++)

putch('-');

for(i=2;i<=endy-starty;i++){

gotoxy(1,i);

putch('1');

gotoxy(endx-startx+1,i);

putch('1');

}

}

main()

{

void border(int,int,int,int);

clrscr();

window(6,8,38,12);

border(6,8,38,12);

gotoxy(2,2);

printf("window 1");

window(8,16,40,24);

border(8,16,40,24);

gotoxy(3,2);

printf("window 2");

getch();

}

三、 屏显状态函数

这里提供三个在文本模式下屏幕显示状态的函数

17 wherex() 光标处x坐标函数

功能: 函数wherex()返回当前窗口中光标处横向坐标。

用法: 此函数调用方式为int wherex(void);

说明: 这个函数调用无参数,其对应的头文件是conioh

返回值: 函数调用成功,返回光标处x坐标值。

例: 调用这个函数的实例见18wherey()函数的例中。

18 wherey() 光标处y坐标函数

功能: 函数wherey()返回当前窗口中光标处纵向坐标。

用法: 该函数调用方式为int wherey(void);

说明: 此函数调用无参数,其相应的头文件是conioh

返回值: 函数调用成功,返回光标处y坐标值。

例: 调作函数wherex()与wherey(),返回当前光标处x坐标与y坐标,并赋给整型变量xpos ,ypos。

int xpos,ypos;

xpos=wherex();

ypos=wherey();

19 gettextinfo() 获取文本窗口信息函数

功能: 函数gettextinfo()获取当前文本窗口信息,并存放在实参结构中。

用法: 函数调用方式为void gettextinfo(struct text-info info);

说明: 函数中参数info 为struct text-info结构型指针,struct text-info结构在此函数相应的头文件中定义为:

struct text-info{

unsigned char winleft; // 窗口左上角x坐标

unsigned char wintop; // 窗口左上角y坐标

unsigned char winright; // 窗口右下角x坐标

unsigned char winbottom; // 窗口右下角y坐标

unsigned char attribute; // 文本属性

unsigned char normattr; // 正常属性

unsigned char currmode; // 当前屏显模式

unsigned char screenhight // 文本窗口高度(以行数计)

unsigned char screenwidth; // 文本窗口宽度(以字符个数计)

unsigned char curx; // 光标处x坐标

unsigned char cury; // 光标处y坐标

};

记住,调用函数gettextinfo()时,要传递struct text-info结构型指针或该结构的首地址,不要传递结构变量本身。

这个函数对应的头文件是conioh

返回值: 返回文本窗口角点坐标、高宽度、文本属性等值,并存放在info所指向的结构变量中。

例: 程序语句说明如何正确调用gettextinfo()函数:

struct text-info win-status;

gettextinfo(&win-status);

CROOD就是这样的一个玩意:

typedef struct _COORD {

SHORT X;

SHORT Y;

} COORD, PCOORD;

很明显这个结构可以用来记录坐标

GetStdHandle()函数获得标准输入输出的句柄,参数STD_OUTPUT_HANDLE是个宏,代表标准输出,可以看作显示器

SetConsoleCursorPosition(hout,coord); 看函数名称:设置控制台光标坐标,参数就是设备句柄,坐标,那么把标准输出的句柄传给函数,就可以把光标定位在对应的位置了(左上角位置是0,0然后向左 向下延伸)

下面这段代码可以在屏幕第10行第30列输出"Hello world"

#include <windowsh>

#include <iostream>

using namespace std;

int main()

{

HANDLE hout;

COORD coord;

coordX=30;

coordY=10;

hout=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hout,coord);

cout<<"Hello world!\n";

return 0;

}

以上就是关于c语言光标位置问题全部的内容,包括:c语言光标位置问题、C语言鼠标 *** 作、怎样用C语言获取屏幕上指定位置处的字符的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:

内存溢出

原文地址:

https://54852.com/web/9473861.html
文本
(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
crmebcrmeb一级用户组
酷派5310怎么获取root
上一篇
2023-04-28
oppo手机访客模式怎么用
2023-04-28

发表评论
请登录后评论...
登录
提交

    评论列表(0条)
保存
{label}{label}