C语言之实现控制台光标随意移动

原理引入windows.h,首先是要获得输入的东西,然后通过判断:

1.方向键:执行上下左右的移动功能

2:回车键:执行换行的功能。

3.普通键:输入功能。

终点就是要获取到屏幕上的坐标,当按下了方向键以后,坐标值+1,或者减一,从而实现了光标的自由移动。

//C语言实现控制台中光标随意移动
#include <stdio.h>
#include <windows.h>
#include <conio.h>

HANDLE hout;
//获得输入
char getInput()
{
    int ch; //输入字符串

    COORD coord; //屏幕上的坐标
    CONSOLE_SCREEN_BUFFER_INFO csbi; //控制台屏幕缓冲区信息

    coord.X=10;
    coord.Y=10;

    ch=getch();

    //0x0d表示回车,0XE0表示上下左右等键的键码
    while(ch==0xE0||ch==0x0d)
    {
        GetConsoleScreenBufferInfo(hout,&csbi);
        coord.X=csbi.dwCursorPosition.X; //得到坐标X的值
        coord.Y=csbi.dwCursorPosition.Y; //得到坐标Y的值
        //如果是回车
        if(ch==0x0d)
        {
            coord.X=0;
            coord.Y++;
            SetConsoleCursorPosition(hout,coord);
            break;
        }
        ch=getch();
        //上
        if(ch==0x48)
        {
            if(coord.Y!=0)coord.Y--;
        }
        //下
        else if(ch==0x50)
        {
            coord.Y++;
        }
        //左
        else if(ch==0x4b)
        {
            if(coord.X!=0){coord.X--;}
        }
        //右
        else if(ch==0x4d)
        {
            if(coord.X!=79)coord.X++;
            else
            {
                coord.X=0;
                coord.Y++;
            }
        }
        SetConsoleCursorPosition(hout,coord);
        ch=getch();
    }
    return ch;
    }
int main()
{
    char ch;
    hout=GetStdHandle(STD_OUTPUT_HANDLE);
    //从键盘获取输入,如果是方向键则执行方向功能,如果是回车键则换行,如果是字符则输出
    while(1)
    {
        ch=getInput();
        printf("%c",ch);
    }
    getchar();
}

原文:C语言实现控制台中光标随意移动

时间: 2024-11-09 00:40:54

C语言之实现控制台光标随意移动的相关文章

C语言实现控制台中光标随意移动

开始准备学习下C,新手哦~~ 今天弄了个控制台程序,光标可以随意在DOS下移动~~ 先放一张效果图,不过很丑,大家能不能看懂,哈哈,就是 I Love You. 代码注释都有,其实好多东西我都是从其他地方拷贝了一些代码,毕竟是新手,还是需要多向网上的一些大神学习的. 原理就是引入windows.h,首先是要获得输入的东西,然后通过判断: 1.方向键:执行上下左右的移动功能 2:回车键:执行换行的功能. 3.普通键:输入功能. 终点就是要获取到屏幕上的坐标,当按下了方向键以后,坐标值+1,或者减一

c语言编程设置控制台字体颜色

一.设置字体颜色: 1. 0 = 黑色       8 = 灰色 1 = 蓝色       9 = 淡蓝色 2 = 绿色       A = 淡绿色 3 = 浅绿色     B = 淡浅绿色 4 = 红色       C = 淡红色 5 = 紫色       D = 淡紫色 6 = 黄色       E = 淡黄色 7 = 白色       F = 亮白色 #include <stdlib.h> system("color 2");system("color F&

2016年9月29日--语言基础:控制台的输入输出、数据类型、数据转换、运算符

一.输入输出 二.数据类型 1.值类型 2.引用类型 三.数据转换 四.运算符 1.算术运算符2.关系运算符3.逻辑运算符4.其它运算符5.条件运算符 一.输入输出 输出 Console.Write(""); Console.WriteLine(""); 输出 输入 Console.Read (); Console.ReadLine(); Console.ReadKey(); Console.ReadLine(); //直到接受到回车命令为止,之前所有输入的内容全部

双缓冲解决控制台应用程序输出“闪屏”(C/C++,Windows)

使用 C 语言编写游戏的小伙伴们想必起初都要遇到这样的问题,在不断清屏输出数据的过程中,控制台中的输出内容会不断地闪屏.出现这个问题的原因是程序对数据处理花掉的时间影响到了数据显示,或许你可以使用局部覆盖更新方法(减少更新数据量)来缓解闪屏,但是这种方法并不适用于所有场合,尤其是更新数据本身就非常大的场合. 本文将讲述解决控制台应用程序输出闪屏的终级解决方法——双缓冲. 问题呈现 下面的代码演示了在高速不断清屏输出数据的过程的闪屏问题,特邀您一试: 1 2 3 4 5 6 7 8 9 10 11

控制台基础概念实例

上一篇文章 控制台基础概念 介绍了控制的基本构成,以及一些操作处理.这一部分以实际代码为主,给出控制台使用的几个例子. 以main函数作为入口函数的程序都是控制台程序,最简单的控制台程序就是Hello World的程序.这里不给出了. GUI程序可以使用以下几种方式使用控制台: 在调用CreateProcess时使用CREATE_NEW_CONSOLE标志.(默认情况下,待启动进程为控制台程序时不推荐使用该参数,因为无法确定用户输入是有哪个控制台处理的) 通过 AttachConsole函数附加

C语言实现贪吃蛇之局部刷新篇

上一篇博客里,我介绍了如何用数组存储坐标,不断全屏刷新以实现动态效果,这几乎是最显而易见的思路,但带来的副作用也十分明显,那就是始终伴随着游戏的闪烁现象,之所以会造成闪烁现象,原因在于频繁的清空与打印,其实贪吃蛇游戏里我们并不需要重打印整个界面,要实现蛇的移动,我们只要打印出新的蛇头,清除原来的蛇尾就好了.食物只有在被吃掉时才需要重新打印,边界更是只用打印一次.好了,既然我们看到了可提升的地方,就开始动手优化吧.显然,我们将需要一个可以自由移动光标的函数,这样我们才能做到在需要的地方打印.TC上

Debian系统学习笔记(3):语言环境

3.修改系统语言环境 (1)按照dpkg包后设定语系 #apt-getinstall dpkg #dpkg-reconfigure locales //选择:en_US.UTF-8 UTF-8    确认OK,即可添加英语语言包 //远程控制台中文显示正常设置,需要加入: [*]zh_CN GB2312  [*]zh_CN.GB18030 GB18030  [*]zh_CN.GBK GBK [*]zh_CN.UTF-8 UTF-8 (2)#vim /etc/locale.gen //查看语言信息

2015年10月23日JS笔记

ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C:DOM标准:专门操作HTML元素,CSS样式,事件的统一标准. BOM:专门操作浏览器窗口的工具. 没标准,由浏览器厂商自行实现. JavaScript=ECMAScript(核心语法)+DOM(操作网页内容)+BOM(操作浏览器窗口,很少用到) Mozilla→Firefox JSer最大挑战:

DELPHI下API简述(1800个API)

DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API