精华内容
下载资源
问答
  • C语言函数:fflush(stdin)

    2021-05-21 04:24:49
    fflush(stdin) ;清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)详细解释一下:函数名: fflush功 能: 清除文件缓冲区,文件以写...

    fflush(stdin) ;

    清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)

    详细解释一下:

    函数名: fflush

    功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件

    原型:int fflush(FILE *stream)

    程序例:

    #include

    #include

    #include

    #include

    void flush(FILE *stream);

    int main(void)

    {

    FILE *stream;

    char msg[] = "This is a test";

    stream = fopen("DUMMY.FIL", "w");

    fwrite(msg, strlen(msg), 1, stream);

    clrscr();

    printf("Press any key to flush\

    DUMMY.FIL:");

    getch();

    flush(stream);

    printf("\nFile was flushed, Press any key\

    to quit:");

    getch();

    return 0;

    }

    void flush(FILE *stream)

    {

    int duphandle;

    fflush(stream);

    duphandle = dup(fileno(stream));

    close(duphandle);

    }

    fflush 的返回值类型是int类型,那么这个int类型具体的返回是什么呢?

    返回值:

    如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。

    注意:如果fflush返回EOF,数据可能由于写错误已经丢失。当设置一个重要错误处理器时,最安全的是用setvbuf函数关闭缓冲或者使用低级I/0例程,如open、close和write来代替流I/O函数。

    #include

    int main()

    {

    int i=0;

    char p;

    scanf("%d",&i);

    问题点---> fflush(stdin);

    printf("I is :%d\n",i);

    scanf("%c",&p);

    printf("Char P is %c.\n",p);

    return 0;

    }

    该程序在dev-c++下编译执行后

    2

    I is :2

    a

    Char P is a.

    在linux下编译执行后

    2

    I is :2

    Char P is

    .

    很明显fflush在linux下没有起到任何作用?请问我错在哪里了?我要怎样清流?当然在linux下我把fflush(stdin);换成getchar();可以达到效果。

    展开全文
  • C语言中fflush()、fflush(stdin)、fflush(stdout)

    千次阅读 多人点赞 2019-01-03 19:15:26
    fflush()不是标准库文件,经笔者测试,VC6.0完美支持,GCC(GCC4.6.2)不支持。 fflush()用于清空文件缓冲区,如果文件是以写的方式打开 的,则把缓冲区内容写入文件。其原型为:  int fflush(FILE* stream); ...

    头文件:#include<stdio.h>

    fflush()不是标准库文件,经笔者测试,VC6.0完美支持,GCC(GCC4.6.2)不支持。

    fflush()用于清空文件缓冲区,如果文件是以写的方式打开 的,则把缓冲区内容写入文件。其原型为:
        int fflush(FILE* stream);

    【参数】stream为文件指针。

    【返回值】成功返回0,失败返回EOF,错误代码存于errno 中。指定的流没有缓冲区或者只读打开时也返回0值。

    fflush()也可用于标准输入(stdin)和标准输出(stdout),用来清空标准输入输出缓冲区。

    stdin 是 standard input 的缩写,即标准输入,一般是指键盘;标准输入缓冲区即是用来暂存从键盘输入的内容的缓冲区。stdout 是 standard output 的缩写,即标准输出,一般是指显示器;标准输出缓冲区即是用来暂存将要显示的内容的缓冲区。

    请看下面的代码(代码一):

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    int a;
    char c;
    
    scanf("%d", &a);
    c = getchar();
    
    printf("a = %d, c = %c \n", a, c);
    
    return 0;
    }
    运行结果:
    

    123abc↙
    a = 123, c = a

    将上面的代码进行更改(代码二):

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    int a;
    char c;
    
    scanf("%d", &a);
    fflush(stdin);
    c = getchar();
    
    printf("a = %d, c = %c \n", a, c);
    
    return 0;
    }
    运行结果:
    

    123abc↙
    xyz↙
    a = 123, c = x

    对比上面的代码,代码一没有清空输入缓冲区,回车时,将123赋值给a,缓冲区剩下abc,接着执行getchar(),发现缓冲区有内容,就无需等待用户输入,直接读取了,将 'a' 赋给 c。代码二执行到fflush(),清空缓冲区,getchar()发现缓冲区没有内容,需要等待用户输入,所以必须输入两次。

    【实例】把输入流与一个缓冲区关联,然后清空缓冲区。

    #include <stdio.h>
    char inbuf[BUFSIZ];
    int main(void)
    {
    char a[100];
    setbuf(stdin, inbuf);
    printf("input a string =");
    scanf("%s",a);
    /*往缓冲区写入数据 */
    puts(inbuf);
    if(0 ==fflush(inbuf)) /*清空文件缓冲区*/
    {
    puts(inbuf);
    }
    puts(inbuf);
    return 0;
    }

    运行结果:
    input a string = qwe
    qwe

    程序先把缓冲区与输入流关联,这样输入的内容就在缓冲区中是可见的。提示用户输入一个字符串,用户输入后, 该字符串会在缓冲区中保存,这时我们可以使用puts函数输出一 遍,然后使用fflush函数清空缓冲区,再次输出结果为空。

     

    1.fflush(stdin):

    作用:清理标准输入流,把多余的未被保存的数据丢掉。。

    如:

    int main()
    {
            int num;
            char str[10];
            cin>>num;
            cout<<num<<endl;
            cin>>str;
            cout<<str<<endl;
            return 0;
    }
    

    从stdin获得一个整数存入num,接着立马打印出来;从stdin获得一个字符串存入str,也立马打印出来。但是下面这种可能需要特别考虑:在首行输入了两个整数,在cin>>num之

    后,stdin缓冲还有一个整数没被读取。接下来,不等输入字符串,就直接把上面多出来的数字存入到str中去并打印。某种程度上这是操作不规范造成的,但是程序应该要有健壮

    性,程序员应该提前预防这种不规范的操作。可以在程序界面上提示“请输入1个整数”,甚至有时候不厌其烦的强调和警告也必要。当然,本例为求简单,并不在UI友好方面做文

    章。这时,可以在cin>>str语句前插入fflush(stdin),如此一来就可以清空标准输入缓冲里多余的数据。

    2.fflush(stdout):

    对标准输出流的清理,但是它并不是把数据丢掉,而是及时地打印数据到屏幕上。标准输出是以行为单位进行的,也即碰到\n才打印数据到屏幕。这就可能造成延时,但是Windows

    平台上,似乎并看不出差别来。也即MSFT已经将stdout的输出改成及时生效了。

    fflush函数被广泛使用在多线程、网络编程的消息处理中。

    fflush(stdout):清空输出缓冲区,并把缓冲区内容输出。
     

    参考:http://c.biancheng.net/cpp/html/2506.html

               https://blog.csdn.net/li_ning_/article/details/51594340

    展开全文
  • 1、fflush(stdin)是清空输入缓冲区的意思。stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西。2、在清除文件缓冲区时使用,文件以写方式打开时将...

    1、fflush(stdin)是清空输入缓冲区的意思。stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西。

    2、在清除文件缓冲区时使用,文件以写方式打开时将缓冲区内容写入文件。

    例:

    #include

    #include

    #include

    #include

    void flush(FILE *stream);

    int main(void)

    {

    FILE *stream;

    char msg[] = "This is a test";

    /* create a file */

    stream = fopen("DUMMY.FIL", "w");

    /* write some data to the file */

    fwrite(msg, strlen(msg), 1, stream);

    clrscr();

    printf("Press any key to flush DUMMY.FIL:");

    getch();

    /* flush the data to DUMMY.FIL without closing it */

    flush(stream);

    printf("\nFile was flushed, Press any key to quit:");

    getch();

    return 0;

    }

    void flush(FILE *stream)

    {

    int duphandle;

    /* flush the stream's internal buffer */

    fflush(stream);

    /* make a duplicate file handle */

    duphandle = dup(fileno(stream));

    /* close the duplicate handle to flush the DOS buffer */

    close(duphandle);

    }

    2ed07c4140977f26b80e9446c0175dc8.png

    扩展资料

    使用fflush的注意事项

    1、MSDN 文档里也清楚地写着:fflush on input stream is an extension to the C standard (fflush 操作输入流是对C标准的扩充)。以下是 C99 对 fflush 函数的定义:int fflush(FILE *stream);

    2、如果stream指向输出流或者更新流(update stream),并且这个更新流最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout)。

    3、fflush函数的行为是不确定的。fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,flush函数会给那些流打上错误标记,并且返回EOF,否则返回0。

    4、如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用 fflush(stdin) 是不正确的。

    参考资料来源:百度百科—fflush(stdin)

    展开全文
  • fflush(stdin)与fflush(stdout) fflush函数广泛应用在多线程,网络编程的消息处理中。 fflush(stdin) 作用 清理标准输入流,把多余的未被保存的数据丢掉。(程序的健壮性) 一般用在输入之前,例如 fflush(stdin); ...

    fflush(stdin)与fflush(stdout)

    fflush函数广泛应用在多线程,网络编程的消息处理中。

    fflush(stdin)

    作用
    清理标准输入流,把多余的未被保存的数据丢掉。(程序的健壮性)
    一般用在输入之前,例如

    fflush(stdin); 
    cin>>L.elem[k].no;
    

    fflush(stdout)

    作用
    清空输出缓冲区,并把缓冲区内容输出。
    是对标准输出流的清理,不是把数据丢掉而是及时的打到屏幕上。(及时输出)
    一般写在输出之后,平台上看不出什么区别,加不加基本上都是立刻出结果。

    展开全文
  • gcc下fflush(stdin)无效的解决

    千次阅读 2015-09-21 20:50:01
    也就是说不一定能实现刷新功能,但有的编译器可能不遵循标准,对fflush(stdin)操作不予警告,并且有时可能产生正确的结果,但最好不要这样使用。 VC上面使用fflush()可以成功, 而在gcc上面使用fflush()却不能成功...
  • c语言中fflush(stdin)作用(转)(2009-04-09 16:43:00)标签:杂谈1、C99 对 fflush函数的定义:int fflush(FILE *stream);如果stream指向输出流或者更新流(updatestream),并且这个更新流最近执行的操作不是输入,那么...
  • 理解:fflush(stdin)和fflush(stdout)和rewind(stdin) 小结论(多谢网友zhao4zhong1为我解答疑难): 1、在每个最后不带\n的printf后面加fflush(stdout);(对标准输出流进行清理,但是它并不是把数据丢掉,而是及时地...
  • b、使用fflush()函数清除缓存:使用ffulsh()时,请不要使用fflush(stdin),因为fflush(stdin)移植性不好,有的平台在会无效,且这个行为是不确定的。 也许有人会说:“居然这样,那么在   scanf   函数...
  • fflush(stdin)

    千次阅读 2011-11-09 18:32:54
    fflush(stdin)  fflush(stdin) ;  清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)。  详细解释一下:  /*...
  • void clean_stdin(void) { int c; do { c = getchar(); } while (c != '\n' && c != EOF); } 转载于:https://www.cnblogs.com/Frank-dev-blog/p/9570800.html
  • 转自:https://www.pinlue.com/article/2018/11/2116/487567643658.html
  • 慎用fflush(stdin)

    千次阅读 2012-08-21 14:10:14
    文章来源 ...fflush(stdin) 是错的 首先请看以下程序:    #include stdio.h> int main( void ) {   int i;   for (;;) {   fputs("Please input an integer: ", stdout);   scan
  • 为什么fflush(stdin)用了并不能清除缓冲区

    万次阅读 多人点赞 2019-11-24 15:37:25
    为什么fflush(stdin)用了并不能清除缓冲区 很多人在教材上都看到fflush(stdin)这个函数的使用,教材给出的解释是清除缓冲区,可是一些动手实践过代码的小伙伴发现,fflush(stdin)这个函数并没有起到清除缓冲区的作用...
  • 理解:fflush(stdin)和fflush(stdout)和rewind(stdin) 小结论(多谢网友zhao4zhong1为我解答疑难): 1、在每个最后不带\n的printf后面加fflush(stdout);(对标准输出流进行清理,但是它并不是把数据丢掉,而是及时地...
  • fflush(stdin);用于清空输入缓存区防止因为按下回车或者空格键而写入缓冲区里面对后续 的处理和判断造成影响。 fflush()不仅可以用于标准输入(stdin)也可以用于标准输出(stdout) 两者都可以用来清空标准输入...
  • 对C 语言初学者来说,fflush(stdin)函数被解释为会清空输入缓冲区的一个系统函数,这是一个曾经几乎对过一半的说法,随着计算机科学的进步,在学习的过程中的逐步完善,将fflush(stdin)函数的过去与现在分析一下。...
  • 在gcc中代替fflush(stdin)

    2021-03-01 19:16:40
    char c; while(c=getchar()!='\n' && c!=EOF);
  • 为什么 fflush(stdin) 是错的? 首先请看以下程序: #include <stdio.h> int main( void ) { int i; while (1) { fputs("Please input an integer: ", stdout); scanf("%d", &i); printf("%d\n", i)....
  • } 在循环条件中加入了fflush(stdin),清除缓冲区,getchar()一次只读取一个字符,当输入多个字符时,循环条件成立,getchar()先读取第一个字符,进入循环,输出对应的大写字母,完成循环后,先进行了fflush(stdin)...
  • 使用fflushstdin

    2021-03-16 03:46:08
    标准C和POSIX离开fflush(stdin)为未定义的行为fflush()的POSIX ,C和C ++标准明确声明行为是未定义的,但是没有一个阻止系统定义它。ISO / IEC 9899:2011 – C11标准 – 说:§7.21.5.2fflush函数¶2如果stream指向...
  • 为了防止上一次的非法输入造成对下一次的影响
  • 当我运行时输入 AB,程序就直接结束了,并没有让我第二次输入内容,按理说我用了fflush后第二次调用scanf会让我继续输入的啊,但是它直接就从stdin读内容了,猜想是fflush并没有清空stdin,但不知原因是什么
  • 今天在编程的时候发现一个有关fflush刷新缓冲区问题: #include&lt;stdio.h&gt; int main(int argc, char const *argv[]) { char c; int number; scanf("%d",&amp;number); fflush(stdout...
  • 在C语言中使用fflushstdin

    千次阅读 2021-07-03 14:01:33
        fflush() 通常仅用于输出流。它的目的是清除(或刷新)输出buffer,并将缓冲的数据移动到控制台(在stdout的情况下)或磁盘(在文件输出流的情况下)。...    根据 C 标准,使用 fflush(stdin) 是未定
  • 清空缓冲区函数fflush(stdin)主要用于从键盘输入以后接下来需要再次从键盘输入并读取字符,因为上次输入以回车结束’,\n’还保留在缓冲区,因此在下一次使用scanf()或者getchar()来读取的话会把‘\n’读入,因此需要...
  • 鉴于scanf函数的复杂性,最好将fflush(stdin)函数放在scanf函数后。每次从键盘输入数据后,就将缓冲区清空。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,963
精华内容 7,585
关键字:

fflush(stdin)

友情链接: rcvz.rar