scanf(),getche()怪现象?高手解答

Huntsmen_LW 2007-11-20 01:19:00
#include<stdio.h>
void main()
{
char flag_exit='Y';
while('Y'==flag_exit)
{
printf("flag_exit=Y\n");
printf("请输入Y or N:");
//scanf("%c",&flag_exit);
//flag_exit=getchar();
flag_exit=getche();
printf("\n");
}
}

上面这个简单的程序,我只是想通过键盘输入Y的话,就不停的来执行while里面的语句,可是我用scanf和getchar的时候,为什么只能做一次就结束while循环了,我单步跟的时候,发现做了一次循环后,当运行到scanf语句时,flag_exit的值并没有要求我来输入,自己就给变了,不知道为什么,而用getche的时候就可以不停的来循环
...全文
86 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf_FienD 2007-11-20
  • 打赏
  • 举报
回复
Treazy
戒指

??????

===================

哈哈 你很想让人带啊

nihonglei 2007-11-20
  • 打赏
  • 举报
回复


哈哈,学习了

将代码改成while( 'Y'==flag_exit || flag_exit == '\n') 试验下

你会发现会进行两次输出

因为把回车也作为一个字符

所以在getchar()之前进行一次fflush(stdin);就可以清除缓冲区的回车符,就能正确输出啦!
Huntsmen_LW 2007-11-20
  • 打赏
  • 举报
回复
如果我几个输入一起写的时候 是不是都要考虑缓充的问题
哪里有这方面详细的介绍呀
Huntsmen_LW 2007-11-20
  • 打赏
  • 举报
回复
原来是这样呀
原来一直没有注意过呀

_石头_ 2007-11-20
  • 打赏
  • 举报
回复
同感! ^_^
独孤过儿 2007-11-20
  • 打赏
  • 举报
回复
呵呵,打你的英文麻烦,还得按一下shift才行,直接打戒指多快啊,嘿嘿...
Treazy 2007-11-20
  • 打赏
  • 举报
回复
过儿怎么把我的qq小名说出来了
看来我还是改小名好了!
独孤过儿 2007-11-20
  • 打赏
  • 举报
回复
缓冲区的问题,按照戒指说的加一行语句就行了,如下:

#include <stdio.h> 

int main()
{
char flag_exit = 'Y';
while ('Y' == flag_exit)
{
printf("flag_exit = Y\n");
printf("请输入Y or N: ");

fflush(stdin);

scanf( "%c", &flag_exit);
//flag_exit=getchar();
//flag_exit = getche();
printf( "\n");
}
return 0;
}
Treazy 2007-11-20
  • 打赏
  • 举报
回复
getchar和scanf前加上
fflush(stdin)
你的问题就会解决了!
lj860603 2007-11-20
  • 打赏
  • 举报
回复
回车算一个字符。

69,373

社区成员

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

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