c语言 scanf原理实现的菜单如何在输入错误时光标退回原位置 int choose(int m
c语言scanf原理实现的菜单如何在输入错误时光标退回原位置intchoose(intmin,intmax){intchoice,state;while((state=s...
c语言 scanf原理实现的菜单如何在输入错误时光标退回原位置
int choose(int min,int max){
int choice,state;
while((state=scanf("%d",&choice))!=1||(choice<min||choice>max))
{
if(state!=1){
scanf("%*s");
}
}
return choice;
}
代码贴上 我做了一个菜单的简单函数 已经实现输入验证 就是发现无法做到输入错误结果光标恢复原位置 只能换行输入 。求教 展开
int choose(int min,int max){
int choice,state;
while((state=scanf("%d",&choice))!=1||(choice<min||choice>max))
{
if(state!=1){
scanf("%*s");
}
}
return choice;
}
代码贴上 我做了一个菜单的简单函数 已经实现输入验证 就是发现无法做到输入错误结果光标恢复原位置 只能换行输入 。求教 展开
3个回答
展开全部
scanf() 只有当 输入缓冲区有数据,并遇到 新行键时 才 开始 按格式转换和读数。
拍入 新行键 时,光标 已经 到了 下 一行。你怎么让 光标 再回 上一行 呢?
你可以用古老 的 HANDLE H_stdout = GetStdHandle( STD_OUTPUT_HANDLE ); 函数,
用 GetConsoleScreenBufferInfo( H_stdout, &csbi ); 取回
CONSOLE_SCREEN_BUFFER_INFO csbi;
用 FillConsoleOutputAttribute(。。。)定位
用 WriteConsoleOutputCharacter( H_stdout, str, strlen(str), coord, &result );
写内容,或移动光标。
------------------------
只输入一个量,你可以“重画”屏幕内容,来个假移动光标:
例如:
#include <stdio.h>
main(){
int x;
int stat;
do {
system("cls");
printf("\n\n\n");
printf(" please input x: ");
stat = scanf("%d",&x);
} while (stat !=1 || x > 100 || x< 0);
}
拍入 新行键 时,光标 已经 到了 下 一行。你怎么让 光标 再回 上一行 呢?
你可以用古老 的 HANDLE H_stdout = GetStdHandle( STD_OUTPUT_HANDLE ); 函数,
用 GetConsoleScreenBufferInfo( H_stdout, &csbi ); 取回
CONSOLE_SCREEN_BUFFER_INFO csbi;
用 FillConsoleOutputAttribute(。。。)定位
用 WriteConsoleOutputCharacter( H_stdout, str, strlen(str), coord, &result );
写内容,或移动光标。
------------------------
只输入一个量,你可以“重画”屏幕内容,来个假移动光标:
例如:
#include <stdio.h>
main(){
int x;
int stat;
do {
system("cls");
printf("\n\n\n");
printf(" please input x: ");
stat = scanf("%d",&x);
} while (stat !=1 || x > 100 || x< 0);
}
展开全部
#include <stdio.h>
#include <conio.h>
#include <windows.h>
int main()
{
HANDLE consoletHandle;
CONSOLE_SCREEN_BUFFER_INFO curInfo;
consoletHandle = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(consoletHandle, &curInfo);
curInfo.dwCursorPosition.Y--;
SetConsoleCursorPosition(consoletHandle, curInfo.dwCursorPosition);
getch();
return 0;
}
这个例子是将光标向上移动一行,关于控制台的函数可以参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询