C程序员

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

2020-07-27  本文已影响0人  taobao

先看一个段简单的程序:

#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");
缓冲区的刷新(清空)

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

上一篇 下一篇

猜你喜欢

热点阅读