搜索
查看: 914|回复: 13
打印 上一主题 下一主题

关于do while的疑惑

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-2 09:38:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
自己写的如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c;
    do
    {
        printf("输入字母\n");
        c=getchar();
        printf("%c\n",c);
  if(c=='y'||c=='Y')
   {
    printf("是\n");
    break;
            }
        else if(c=='n'||c=='N')
   {
    printf("否\n");
    break;
            }
        else
   printf("wrong!\n");
    }
    while(1);
system("pause");
return 0;
}

我想让他提示出入,如果是y就跳出来,是n也会跳出来。
如是不是y和n这两种情况,就重新输入。
但运行结果是
提示输入,我输了下c,然后就提示wrong ,接着又执行了一遍,然后才让我输入,不懂。
以下是运行结果:
-----------/另人糊涂结果/---------------------
输入字母
c                                                 (我就在这输入了一个c,下面就全运行了)
c
wrong!
输入字母                                      (在这一步我什么都没做,直接就往下运行了)

wrong!
输入字母                                     (第二次提示让我输入,)
------------------------------------------------
我不明白我还没有输入为什么就被赋值为空格了,我不明白为什么会跳过第个二输入字母的提示,
求大神解答


沙发
 楼主| 发表于 2014-3-2 12:28:15 | 显示全部楼层
rosynirvana 发表于 2014-3-2 12:20
因为你输入的是: c 回车
第一次读取的是c,第二次读取的是回车

是getchar函数的原因吗?
是不是scanf函数也存在这种情况呢?
我把把刚才那个getchar换成了scanf也存在了
有点乱了被这个搞得.
板凳
 楼主| 发表于 2014-3-2 12:30:13 | 显示全部楼层

用getchar函数不可以吗?为什么改成这种结果?不懂哟
地板
 楼主| 发表于 2014-3-2 12:37:30 | 显示全部楼层
rosynirvana 发表于 2014-3-2 12:20
因为你输入的是: c 回车
第一次读取的是c,第二次读取的是回车

我用了fflush(stdin)就好了,谢谢您.
5#
 楼主| 发表于 2014-3-7 10:39:36 | 显示全部楼层
rosynirvana 发表于 2014-3-2 17:03
最后再说一下缓冲区这个名词

用C标准库函数读取键盘输入(getch之类不是标准库函数),是先把输入的内 ...

非常感恩您细致的讲解,真心感谢。
6#
 楼主| 发表于 2014-3-7 10:40:29 | 显示全部楼层
4399APPLE 发表于 2014-3-2 13:09
有个地方要你注意:
fflush(stdin);是不正规的作法,并不能“正规的”清除缓冲区
建议这样:

好的,明白了,非常感谢您。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表