• C语言输入缓冲区问题


      今天写代码可是被搞的七荤八素的,所以也就记录下,还是C语言,现在应该没有用C写软件的了,我今天写的时候就遇到一个很恶心的问题,憋了好长时间。先上个示例代码吧。

        do
        {    
    
            if (User_in == 'y' || User_in == 'Y' )
            {
                GetInfo();            // 我的一个获取信息函数,你可以自己实现,看看
                printf("Continue to Get information?(y/n):");
            }
            else
                continue;
            
            //-------下面判断用户输入的字符
    
            scanf("%c",&User_in);
            switch(User_in)
            {
            case 'y':
            case 'Y':break;
            case 'n':
            case 'N':
                printf("\n.......Exit.......\n");
                exit(-1);
                break;
            default:    printf("You Intput Error!\n");break;
            }
        }while(1);       

    如果按上面的代码运行的话,会发现在第一次输入y确定之后,紧接着会输出"Continue to Get information?(y/n): You Intput Error!
    那是因为你确认的时候回车键产生一个换行符,导致下次获得数据的时候时。‘\n’会先被从缓冲区读取,而用户没输出就会打印了Continue to Get information?(y/n):,又由于‘\n’不符合条件,进而会打印出 You Intput Error!,需要一个能去掉'\n'的东西。我就是在这被纠结的。

    一开始我以为在获取数据后用下面这几行代码就可以,可是没实现,先看看我写的吧。

    while(User_in == "\n")
    {
              continue;  
    }

    我理解的是,User_in中有这个换行符就会被过滤掉,可惜没有。

    下面看看这个帮我搞定问题的家伙吧。

    fflush函数

    原型是:int fflush(FILE *fp)

    调用fflush()函数可以讲缓冲区中任何未写的数据发送到一个由fp指定的输出文件中去,这个过程称为刷新缓冲区(flush a buffer).

    我这里就是要把键盘缓冲区刷新(个人就理解成清空了)。所以加上个fflush(stdin);这样就解决了。

    ···哎,之所以搞的我这么难受,还都要怪我没好好看C primer plus,我唯一没好好看的就是13章后半章,和最后一章,可是 这个fflush正好出在13章后半章中,可让我好纠结一番。

      以上都是个人总结,不对之处,欢迎之处,也希望菜鸟可以借鉴,大牛批评指点·················

    ----------------------------------------------在穷无非讨饭,不死终会出头。
  • 相关阅读:
    Unix&Linux下常见的性能分析工具介绍
    理解Load Average做好压力测试
    cron 的配置和说明
    原生js模仿下拉刷新功能
    webpack初步了解
    数组的迭代方法
    webpack4
    反思面向对象
    C和lua的互相调用
    对Zookeeper的一些分析
  • 原文地址:https://www.cnblogs.com/scrat/p/2694362.html
Copyright © 2020-2023  润新知