打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux 下连续使用多个scanf() 的问题和 fflush(stdin)的变通处理

linux 下连续使用多个scanf() 会有问题,实例:


  while (1)
    {
    printf("Please input: ");
    scanf("%s",pstr) ;
    }

这段程序运行会出问题,当一次输入后,会不停的提示Please input:,程序不会在scanf等待下一次的输入。
一般资料会说添加fflush函数可解决这个问题:
  while (1)
    {
    printf("Please input: ");
    scanf("%s",pstr) ;
     fflush(stdin);
    }

但是在gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-46)下,fflush函数形同虚设。man fflush有详细的说明可参考。
网络上有人说,在scanf之后使用一个getcahr()可解决,可是,当时输入多个字符还是有问题。
  while (1)
    {
    printf("Please input: ");
    scanf("%s",pstr) ;
     getchar();
    }

执行结果:

Please input: 1
Please input: 22
Please input: Please input: 333

Please input: Please input: Please input: 4444
Please input: Please input: Please input: Please input:

 

添加一个循环,问题解决了:

while (1)
{
    printf("Please input: ");
    scanf("%s",pstr) ;
   
while ('/n' != getchar() );
}

  

附一个在网络上查到的另一个解决方法:

#define STR_BUFFSIZE 5
while (1)
   {
    printf("Please input: ");
    scanf("%s",pstr) ;    
    char buffer[STR_BUFFSIZE];
    while( fgets(buffer, STR_BUFFSIZE, stdin) != NULL )
    if(buffer[strlen(buffer)-1] == '/n' )
    }


结论:Linux下C语言连续多个scanf()这么不好用,用gets函数代替如何呢?gets函数也有漏洞!(网络搜索就知道了)

scanf这个现象是如何产生的呢?参考课本是可以有合理的解释。但还是代码说明一切。附一个版本scanf()函数的源代码下载地址: http://ftp.gnu.org/gnu/glibc/glibc-2.0.6.tar.gz 供有心人深入研究吧。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[问题求助]fflush(stdin)的用法? — 编程爱好者论坛 bbs.program...
数据结构题集(C语言版)算法设计题解析-第一章
c语言数据结构--图的邻接矩阵和邻接表操作的基本操作
c语言输入输出缓冲区的概念_仙剑系列
C语言猜拳游戏代码及分析
小型商品管理程序设计设计结构体数组,结构中包含数据为:编号、商品分类、名称、零售价、售出数量、销售金额等设计各个函数,分别实现以下功能:(1)输入数据 (2)显示所有信息 (3) 输入商品类别,显示符合该条
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服