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;
}
代码贴上 我做了一个菜单的简单函数 已经实现输入验证 就是发现无法做到输入错误结果光标恢复原位置 只能换行输入 。求教
展开
 我来答
金色潜鸟
2014-01-14 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5737万
展开全部
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);

}
LicthDay
2014-01-13 · TA获得超过223个赞
知道小有建树答主
回答量:128
采纳率:100%
帮助的人:142万
展开全部
#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;
}

这个例子是将光标向上移动一行,关于控制台的函数可以参考

http://msdn.microsoft.com/en-us/library/ms682010

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
he_jin_jin8
2014-01-13
知道答主
回答量:56
采纳率:0%
帮助的人:7万
展开全部
uyuyuyuyuyuy
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式