难难难~~~请教大家

flyqq 2002-04-01 02:22:52
我写了一个小工具,大家看看这里有什么错误吗?我可能理解不够,第二次要求用户确认并没有起到作用,直接跳过了。我从来没见过类似的程序,高手能解释一下通常类似的做法吗?拜托~~~~


printf("您确认要从%s文件恢复吗?\n错误操作将导致您不能引导机器,请慎用!(y/n?默认为n):",argv[2]);
res=getchar();
switch(res){
case 'y':break;
default:exit(1);
}
……
……
printf("\n文件看来不是引导区备份,这可能引起系统瘫痪,请慎用!\n如果您是自行修改引导区,请确认。(y/n?默认为n):");
res=getchar();
switch(res){
case 'y':break;
default:exit(1);
}
……
……
...全文
33 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyqq 2002-04-03
  • 打赏
  • 举报
回复
我查阅了《c语言大全》一书,问题已解决。
使用getch(),getche()代替getchar()
函数原型:
int getch(void);
int getche(void);

getch()函数在键击之后立即返回,不向屏幕回显字符。getche()功能相同,但是回显字符。在交互程序中,常常用这两个函数代替getchar()。

谢谢各位。
jishiping 2002-04-02
  • 打赏
  • 举报
回复
不要用getchar(),而用getch()。
ljf1107 2002-04-02
  • 打赏
  • 举报
回复
你可以用getline()呀。
flyqq 2002-04-02
  • 打赏
  • 举报
回复
谢谢三位的回答和鼓励!真的谢谢你们!!

可是如果用户输入了"yes"等非标准输入呢?
是不是要用一个循环,直到得到回车符才退出呢?
res=res2=getchar();
while(res2!='\n')res2=getchar();
switch(res){
case 'y':break;
default:exit(1);
}
……
……
mike_hao_1980 2002-04-01
  • 打赏
  • 举报
回复
的确是这样,用getchar()一般都是这样的,用scanf("%c",&ch)也要用两次
以后还有很多东西要慢慢学呢 想不到的多着呢 加油吧
wkoji 2002-04-01
  • 打赏
  • 举报
回复
同意楼上啊,这个问题没亲自做过真的很难想到。我也曾经吃过苦头,
每次取自己所需数据之前,都应该清空一次缓冲区。
jianfeizhao 2002-04-01
  • 打赏
  • 举报
回复
当你输入“y”和回车时,键盘缓冲区中存放这两个字符,
第一个是“y”,第二个是回车符
第一次调用getchar()时,只读取了字符“y”;第二次调用getchar()时,读取了回车符。
解决方法是在res=getchar();再调用一次getchar()将回车符从缓冲区中清出。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧