按(←)键光标向左移动一个字符!
按(→)键光标向右移动一个字符!
按(delete)键光标右边的一个字符删除!
按(backspace)键光标左边的一个字符删除!
按 (space)键光标右插入半角空格!
别的数字字母按下光标右插入该字符(要考虑shift键)!
按下ESC键时编辑结束!
注:一行显示不了时,窗口大小固定换行显示!
光标的动作参考windows的记事本!按上下键光标不能移动!
原文是日语的,我翻译的!意思就是这样!希望高手帮忙!
35 个解决方案
#1
这是一个大工程,帮顶
google记事本的源码
google记事本的源码
#2
折腾人嘛,dos下的编程问题现在还拿出来。这程序上学学C的人才写,俺当年也写过。
#3
日本人真变态。
#4
无聊的xrb
#5
kankan,
#6
JF
#7
谁知道字符界面下光标怎么移动啊?
#8
纯c编译器用gotoxy就可以
若是用for windows的编译器(vc6.0或tc for windows)的话,可以用windows.h库文件的一个函数实现光标移动
是BOOL SetConsoleCursorPosition(
HANDLE hConsoleOutput, // handle to screen buffer
COORD dwCursorPosition // new cursor coordinates
);
至于相应键盘觉得直接getchar读取字符就可以了吧?(如果要屏蔽其他按键的话就判断一下吧)
删除字符的话可以把光标移到指定位置printf("");应该可以实现吧!
光标在控制台上应该是自动换行的吧?没用过dos系统,不敢瞎说。
半角空格?是printf(" ")吗?(现在是半角输入法)
考虑shift键的话试一下同时读取两个字符?这个应该不像windows提供的api那么简单吧?
但是个人觉得控制台输入的话貌似已经考虑shift键了,不需要我们在作额外工作了吧?
个人的yy
若是用for windows的编译器(vc6.0或tc for windows)的话,可以用windows.h库文件的一个函数实现光标移动
是BOOL SetConsoleCursorPosition(
HANDLE hConsoleOutput, // handle to screen buffer
COORD dwCursorPosition // new cursor coordinates
);
至于相应键盘觉得直接getchar读取字符就可以了吧?(如果要屏蔽其他按键的话就判断一下吧)
删除字符的话可以把光标移到指定位置printf("");应该可以实现吧!
光标在控制台上应该是自动换行的吧?没用过dos系统,不敢瞎说。
半角空格?是printf(" ")吗?(现在是半角输入法)
考虑shift键的话试一下同时读取两个字符?这个应该不像windows提供的api那么简单吧?
但是个人觉得控制台输入的话貌似已经考虑shift键了,不需要我们在作额外工作了吧?
个人的yy
#9
不会,帮顶!
#10
我建议不要加入这种公司,否则等你在哪混不下去想跳槽难。这么早的技术还搞啥搞
#11
真的是哟 靠他个日本鬼子
#12
参考SciTE源码
#13
不懂
#14
帮顶.等待解答.
#15
帮顶先!对了,LZ就这一道题吗?
#16
我只有光标左移右移,退格删除的操作,当然了,固定屏幕大小可以换行。可左右移动。可以反函数代码发给你
#17
这样太bt了。
#18
int getInputStr(char *__strInput)
{
char __cInput;
int __curStrInput,__nLastCur;
int x,y; //当前光标位置
int X,Y; //末位光标位置
int i; //循环控制
__curStrInput = 0;
__nLastCur = 0; //字符位数标志
while(1)
{
wherexy(&x,&y); //获得当前光标位置
__cInput = getch();
if(__cInput > 47 && __cInput < 58 && __nLastCur < M && (__cInput != 48 || __curStrInput != 0))
//长度允许范围内录入字符为'0'到'9',且第一位不为'0'
{
for(i = __nLastCur;i > __curStrInput;i--) //插入录入字符
{
__strInput[i] = __strInput[i - 1];
}
__strInput[__curStrInput++] = __cInput;
__nLastCur++;
for(i = __curStrInput - 1;i < __nLastCur;i++) //回显录入字符
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 79) //光标回位
{
gotoxy(x + 1,y);
}
else
{
gotoxy(0,y + 1);
}
}
else if(__cInput == 13) //回车处理
{
if(__nLastCur != 0)
{
__strInput[__nLastCur] = 0;
gotoxy(X,Y); //光标归尾
printf("\n");
return 0;
}
else
{
printf("\n");
return -1;
}
}
else if(__cInput == 8 && __curStrInput != 0) //退格处理
{
for(i = __curStrInput - 1;i < __nLastCur - 1;i++)
{
__strInput[i] = __strInput[i+1];
}
__strInput[i] = 0;
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
for(i = __curStrInput - 1;i < __nLastCur;i++)
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 0)
{
gotoxy(x - 1,y);
}
else
{
gotoxy(79,y - 1);
}
__curStrInput--;
__nLastCur--;
}
else if(__cInput == 75 && __curStrInput != 0) //左退光标
{
wherexy(&x,&y); //获得光标位置
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
__curStrInput--;
}
else if(__cInput == 77 && __curStrInput < __nLastCur) //右进光标
{
printf("%c",__strInput[__curStrInput]);
__curStrInput++;
}
else if(__cInput == 27) //EXC退出
{
return 1;
}
else if(__cInput == -32){}
else //其它非法字符
{
printf("\a");
}
}
}
void gotoxy(int x,int y)
{
COORD coord; //windows.h中描述点的结构体
coord.X = x;
coord.Y = y;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
SetConsoleCursorPosition(hOut,coord); //将光标定位在coord所描述的位置
}
void wherexy(int *x,int *y)
{
CONSOLE_SCREEN_BUFFER_INFO bInfo; //显存
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
GetConsoleScreenBufferInfo(hOut,&bInfo);
COORD coord = bInfo.dwCursorPosition; //将显存中光标信息赋予coord
*x = coord.X;
*y = coord.Y;
}
{
char __cInput;
int __curStrInput,__nLastCur;
int x,y; //当前光标位置
int X,Y; //末位光标位置
int i; //循环控制
__curStrInput = 0;
__nLastCur = 0; //字符位数标志
while(1)
{
wherexy(&x,&y); //获得当前光标位置
__cInput = getch();
if(__cInput > 47 && __cInput < 58 && __nLastCur < M && (__cInput != 48 || __curStrInput != 0))
//长度允许范围内录入字符为'0'到'9',且第一位不为'0'
{
for(i = __nLastCur;i > __curStrInput;i--) //插入录入字符
{
__strInput[i] = __strInput[i - 1];
}
__strInput[__curStrInput++] = __cInput;
__nLastCur++;
for(i = __curStrInput - 1;i < __nLastCur;i++) //回显录入字符
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 79) //光标回位
{
gotoxy(x + 1,y);
}
else
{
gotoxy(0,y + 1);
}
}
else if(__cInput == 13) //回车处理
{
if(__nLastCur != 0)
{
__strInput[__nLastCur] = 0;
gotoxy(X,Y); //光标归尾
printf("\n");
return 0;
}
else
{
printf("\n");
return -1;
}
}
else if(__cInput == 8 && __curStrInput != 0) //退格处理
{
for(i = __curStrInput - 1;i < __nLastCur - 1;i++)
{
__strInput[i] = __strInput[i+1];
}
__strInput[i] = 0;
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
for(i = __curStrInput - 1;i < __nLastCur;i++)
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 0)
{
gotoxy(x - 1,y);
}
else
{
gotoxy(79,y - 1);
}
__curStrInput--;
__nLastCur--;
}
else if(__cInput == 75 && __curStrInput != 0) //左退光标
{
wherexy(&x,&y); //获得光标位置
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
__curStrInput--;
}
else if(__cInput == 77 && __curStrInput < __nLastCur) //右进光标
{
printf("%c",__strInput[__curStrInput]);
__curStrInput++;
}
else if(__cInput == 27) //EXC退出
{
return 1;
}
else if(__cInput == -32){}
else //其它非法字符
{
printf("\a");
}
}
}
void gotoxy(int x,int y)
{
COORD coord; //windows.h中描述点的结构体
coord.X = x;
coord.Y = y;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
SetConsoleCursorPosition(hOut,coord); //将光标定位在coord所描述的位置
}
void wherexy(int *x,int *y)
{
CONSOLE_SCREEN_BUFFER_INFO bInfo; //显存
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
GetConsoleScreenBufferInfo(hOut,&bInfo);
COORD coord = bInfo.dwCursorPosition; //将显存中光标信息赋予coord
*x = coord.X;
*y = coord.Y;
}
#19
参考Notepad++的源代码
#20
see see
#21
18L你还真带劲,真去写的,这种日企去了只有一个结果,无限时的加班,可能工资会高点,但人生失去了意义
有的这样还不如去好点的国企,一样是加班,帮自己人干总比帮外人干好吧
有的这样还不如去好点的国企,一样是加班,帮自己人干总比帮外人干好吧
#22
我想我完了,我学过c语言,可是我编不出来,看来要好好学学。
#23
mark
#24
顶
#25
mark
#26
只是帮帮忙嘛,至于去不去是楼主的事,大家说对吧
#27
写不出来,向各位大虾学习中
#28
VIM
#29
Linux command "less" source code
#30
珍妮维纳斯就是大头,史前动物了: )
想想windows记事本或者Vi编辑器,有几个人能做到?这个题目还真有难度。
#31
关注~
#32
找本<<c语言实用大全>>,上面有很多这方面的东西
#33
打倒日本鬼子!
#34
饿死,不进小日本厂
#35
变态,其实 我也曾经去过一家韩国公司笔试,出的题目比这个还变态
老外又变态心理!
老外又变态心理!
#1
这是一个大工程,帮顶
google记事本的源码
google记事本的源码
#2
折腾人嘛,dos下的编程问题现在还拿出来。这程序上学学C的人才写,俺当年也写过。
#3
日本人真变态。
#4
无聊的xrb
#5
kankan,
#6
JF
#7
谁知道字符界面下光标怎么移动啊?
#8
纯c编译器用gotoxy就可以
若是用for windows的编译器(vc6.0或tc for windows)的话,可以用windows.h库文件的一个函数实现光标移动
是BOOL SetConsoleCursorPosition(
HANDLE hConsoleOutput, // handle to screen buffer
COORD dwCursorPosition // new cursor coordinates
);
至于相应键盘觉得直接getchar读取字符就可以了吧?(如果要屏蔽其他按键的话就判断一下吧)
删除字符的话可以把光标移到指定位置printf("");应该可以实现吧!
光标在控制台上应该是自动换行的吧?没用过dos系统,不敢瞎说。
半角空格?是printf(" ")吗?(现在是半角输入法)
考虑shift键的话试一下同时读取两个字符?这个应该不像windows提供的api那么简单吧?
但是个人觉得控制台输入的话貌似已经考虑shift键了,不需要我们在作额外工作了吧?
个人的yy
若是用for windows的编译器(vc6.0或tc for windows)的话,可以用windows.h库文件的一个函数实现光标移动
是BOOL SetConsoleCursorPosition(
HANDLE hConsoleOutput, // handle to screen buffer
COORD dwCursorPosition // new cursor coordinates
);
至于相应键盘觉得直接getchar读取字符就可以了吧?(如果要屏蔽其他按键的话就判断一下吧)
删除字符的话可以把光标移到指定位置printf("");应该可以实现吧!
光标在控制台上应该是自动换行的吧?没用过dos系统,不敢瞎说。
半角空格?是printf(" ")吗?(现在是半角输入法)
考虑shift键的话试一下同时读取两个字符?这个应该不像windows提供的api那么简单吧?
但是个人觉得控制台输入的话貌似已经考虑shift键了,不需要我们在作额外工作了吧?
个人的yy
#9
不会,帮顶!
#10
我建议不要加入这种公司,否则等你在哪混不下去想跳槽难。这么早的技术还搞啥搞
#11
真的是哟 靠他个日本鬼子
#12
参考SciTE源码
#13
不懂
#14
帮顶.等待解答.
#15
帮顶先!对了,LZ就这一道题吗?
#16
我只有光标左移右移,退格删除的操作,当然了,固定屏幕大小可以换行。可左右移动。可以反函数代码发给你
#17
这样太bt了。
#18
int getInputStr(char *__strInput)
{
char __cInput;
int __curStrInput,__nLastCur;
int x,y; //当前光标位置
int X,Y; //末位光标位置
int i; //循环控制
__curStrInput = 0;
__nLastCur = 0; //字符位数标志
while(1)
{
wherexy(&x,&y); //获得当前光标位置
__cInput = getch();
if(__cInput > 47 && __cInput < 58 && __nLastCur < M && (__cInput != 48 || __curStrInput != 0))
//长度允许范围内录入字符为'0'到'9',且第一位不为'0'
{
for(i = __nLastCur;i > __curStrInput;i--) //插入录入字符
{
__strInput[i] = __strInput[i - 1];
}
__strInput[__curStrInput++] = __cInput;
__nLastCur++;
for(i = __curStrInput - 1;i < __nLastCur;i++) //回显录入字符
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 79) //光标回位
{
gotoxy(x + 1,y);
}
else
{
gotoxy(0,y + 1);
}
}
else if(__cInput == 13) //回车处理
{
if(__nLastCur != 0)
{
__strInput[__nLastCur] = 0;
gotoxy(X,Y); //光标归尾
printf("\n");
return 0;
}
else
{
printf("\n");
return -1;
}
}
else if(__cInput == 8 && __curStrInput != 0) //退格处理
{
for(i = __curStrInput - 1;i < __nLastCur - 1;i++)
{
__strInput[i] = __strInput[i+1];
}
__strInput[i] = 0;
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
for(i = __curStrInput - 1;i < __nLastCur;i++)
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 0)
{
gotoxy(x - 1,y);
}
else
{
gotoxy(79,y - 1);
}
__curStrInput--;
__nLastCur--;
}
else if(__cInput == 75 && __curStrInput != 0) //左退光标
{
wherexy(&x,&y); //获得光标位置
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
__curStrInput--;
}
else if(__cInput == 77 && __curStrInput < __nLastCur) //右进光标
{
printf("%c",__strInput[__curStrInput]);
__curStrInput++;
}
else if(__cInput == 27) //EXC退出
{
return 1;
}
else if(__cInput == -32){}
else //其它非法字符
{
printf("\a");
}
}
}
void gotoxy(int x,int y)
{
COORD coord; //windows.h中描述点的结构体
coord.X = x;
coord.Y = y;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
SetConsoleCursorPosition(hOut,coord); //将光标定位在coord所描述的位置
}
void wherexy(int *x,int *y)
{
CONSOLE_SCREEN_BUFFER_INFO bInfo; //显存
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
GetConsoleScreenBufferInfo(hOut,&bInfo);
COORD coord = bInfo.dwCursorPosition; //将显存中光标信息赋予coord
*x = coord.X;
*y = coord.Y;
}
{
char __cInput;
int __curStrInput,__nLastCur;
int x,y; //当前光标位置
int X,Y; //末位光标位置
int i; //循环控制
__curStrInput = 0;
__nLastCur = 0; //字符位数标志
while(1)
{
wherexy(&x,&y); //获得当前光标位置
__cInput = getch();
if(__cInput > 47 && __cInput < 58 && __nLastCur < M && (__cInput != 48 || __curStrInput != 0))
//长度允许范围内录入字符为'0'到'9',且第一位不为'0'
{
for(i = __nLastCur;i > __curStrInput;i--) //插入录入字符
{
__strInput[i] = __strInput[i - 1];
}
__strInput[__curStrInput++] = __cInput;
__nLastCur++;
for(i = __curStrInput - 1;i < __nLastCur;i++) //回显录入字符
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 79) //光标回位
{
gotoxy(x + 1,y);
}
else
{
gotoxy(0,y + 1);
}
}
else if(__cInput == 13) //回车处理
{
if(__nLastCur != 0)
{
__strInput[__nLastCur] = 0;
gotoxy(X,Y); //光标归尾
printf("\n");
return 0;
}
else
{
printf("\n");
return -1;
}
}
else if(__cInput == 8 && __curStrInput != 0) //退格处理
{
for(i = __curStrInput - 1;i < __nLastCur - 1;i++)
{
__strInput[i] = __strInput[i+1];
}
__strInput[i] = 0;
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
for(i = __curStrInput - 1;i < __nLastCur;i++)
{
printf("%c",__strInput[i]);
}
wherexy(&X,&Y); //末位光标位置获取
if(x != 0)
{
gotoxy(x - 1,y);
}
else
{
gotoxy(79,y - 1);
}
__curStrInput--;
__nLastCur--;
}
else if(__cInput == 75 && __curStrInput != 0) //左退光标
{
wherexy(&x,&y); //获得光标位置
if(x != 0)
{
gotoxy(x - 1,y); //光标定位
}
else
{
gotoxy(79,y - 1); //光标定位
}
__curStrInput--;
}
else if(__cInput == 77 && __curStrInput < __nLastCur) //右进光标
{
printf("%c",__strInput[__curStrInput]);
__curStrInput++;
}
else if(__cInput == 27) //EXC退出
{
return 1;
}
else if(__cInput == -32){}
else //其它非法字符
{
printf("\a");
}
}
}
void gotoxy(int x,int y)
{
COORD coord; //windows.h中描述点的结构体
coord.X = x;
coord.Y = y;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
SetConsoleCursorPosition(hOut,coord); //将光标定位在coord所描述的位置
}
void wherexy(int *x,int *y)
{
CONSOLE_SCREEN_BUFFER_INFO bInfo; //显存
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
GetConsoleScreenBufferInfo(hOut,&bInfo);
COORD coord = bInfo.dwCursorPosition; //将显存中光标信息赋予coord
*x = coord.X;
*y = coord.Y;
}
#19
参考Notepad++的源代码
#20
see see
#21
18L你还真带劲,真去写的,这种日企去了只有一个结果,无限时的加班,可能工资会高点,但人生失去了意义
有的这样还不如去好点的国企,一样是加班,帮自己人干总比帮外人干好吧
有的这样还不如去好点的国企,一样是加班,帮自己人干总比帮外人干好吧
#22
我想我完了,我学过c语言,可是我编不出来,看来要好好学学。
#23
mark
#24
顶
#25
mark
#26
只是帮帮忙嘛,至于去不去是楼主的事,大家说对吧
#27
写不出来,向各位大虾学习中
#28
VIM
#29
Linux command "less" source code
#30
珍妮维纳斯就是大头,史前动物了: )
想想windows记事本或者Vi编辑器,有几个人能做到?这个题目还真有难度。
#31
关注~
#32
找本<<c语言实用大全>>,上面有很多这方面的东西
#33
打倒日本鬼子!
#34
饿死,不进小日本厂
#35
变态,其实 我也曾经去过一家韩国公司笔试,出的题目比这个还变态
老外又变态心理!
老外又变态心理!