分享

[问题求助]fflush(stdin)的用法? — 编程爱好者论坛 bbs.program...

 skywood 2007-02-01
[问题求助]fflush(stdin)的用法?
还有fflush(stdin),我听人说好像是清空输入的一个变量的缓存空间,好再往里面赋值!
为什么下面这个程序不用呢?getchar不是只接一个字符吗?那它里面的值不用清吗?

和第二个求阶乘的和的程序中用fflush(stdin)有什么区别?

程序一:
#include"stdio.h"
main()
{
    char i;
    int zm=0,kg=0,sz=0,qt=0;
 
    while((i=getchar())!=‘\n‘)
    {

        if((i>=‘A‘&&i<=‘Z‘)||(i>=‘a‘&&i<=‘z‘))
  {
   zm++;
  }
        else if(i==‘ ‘)
  {
   kg++;
  }
        else if(i>=‘0‘&&i<=‘9‘)
  {
   sz++;
  }
        else
  {
   qt++;
  }
 }
 
    printf("字母有%d个\n空格有%d个\n数字有%d个\n其它有%d个\n",zm,kg,sz,qt);
}

程序二:
#include "stdio.h"
main()
{

    int i,sum,count;
    char y;
    y=‘y‘;

    do
    {
        sum=1;count=0;
        printf("请输入:");
        scanf("%d",&i);
        fflush(stdin);
        while(i>0)
        {

            sum*=i;
            i--;
            count++;
        }

    printf("%d!=%d\n",count,sum);
    printf("是否要输入更多:Y/N?\n");
    scanf("%c",&y);

    }while(y==‘y‘||y==‘Y‘);

}

 

作者:雪光风剑
专家分:8020
发表时间:2007-1-25 10:22:00    [回复]  [引用]
1 楼  
注意每个scanf之后会产生一个回车垃圾
这个垃圾会影响到后面scanf("%c")的结果,造成这里的字符输入无效
fflush(stdin)之后回车垃圾被消除

 

  此帖尚未评分
作者:雪光风剑
专家分:8020
发表时间:2007-1-25 10:25:00    [回复]  [引用]
2 楼  
getchar是建立一个缓存空间(buffer)然后把输入内容按流读入,这一过程是不产生回车垃圾的
流使用完毕后buffer自动清空
而scanf的缓冲中有一个\n需要手动清空

 

  此帖尚未评分
作者:sarrow
专家分:23560
发表时间:2007-1-25 10:45:00    [回复]  [引用]
3 楼  
引用
fflush(stdin)之后回车垃圾被消除


sorry,标准没有提供fflush(stdin)的用法;只提供了fflush(stdout)——作用是清空输出流,把缓冲的数据都输出。

若想用
scanf("%c");
接受非空格、非回车字符,可以这样用:

scanf(" %c");

注意,加了一个空格。

欲知详细的输入输出控制,请下载如下书籍:

[讨论]学C/C++的都应该看一看的两本书! 
http://www./club/showbbs.asp?id=179087

中的the GNU C Lib Manual

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多