美文网首页C程序员
C语言缓冲区导致的问题和缓冲区的清理方法

C语言缓冲区导致的问题和缓冲区的清理方法

作者: taobao | 来源:发表于2020-07-27 14:41 被阅读0次

    先看一个段简单的程序:

    #include <stdio.h>
    #include <stdlib.H>
    
    int main() {
        int a;
        char b;
        char c[10] = "123";
    
        scanf("%d", &a);
        scanf("%c", &b); 
        scanf("%s", c);
        printf("数字:%d 字符:%c 字符串:%s", a, b, c);
    
        return 0;
    }
    

    执行程序,会发现,字符b,竟然接收了换行符 或者 空格(单行输入 空位分隔)。

    处理方法,在读取单个字符前,先清空缓冲区:

    1:使stdin输入流由默认缓冲区转为无缓冲区
      setbuf(stdin, NULL);
    2:不停地使用getchar()获取缓冲中字符,直到获取的c是“\n”或文件结尾符EOF为止
       while ((b = getchar()) != EOF && b != '\n');
    3:清空缓冲区,读取非换行字符舍去掉,再读取一个字符舍去掉
      scanf("%*[^\n]"); scanf("%*c");
    
    缓冲区的刷新(清空)

    所谓刷新缓冲区,就是将缓冲区中的内容送达到目的地。缓冲区的刷新遵循以下的规则:

    • 不管是行缓冲还是全缓冲,缓冲区满时会自动刷新;
    • 行缓冲遇到换行符\n时会刷新;
    • 关闭文件时会刷新缓冲区;
    • 程序关闭时一般也会刷新缓冲区,这个是由标准库来保障的;
    • 使用特定的函数也可以手动刷新缓冲区

    相关文章

      网友评论

        本文标题:C语言缓冲区导致的问题和缓冲区的清理方法

        本文链接:https://www.haomeiwen.com/subject/kmezlktx.html