标准输入流stdin


FILE结构体:

struct _iobuf {
    char *_ptr;
    int   _cnt;
    char *_base;
    int   _flag;
    int   _file;
    int   _charbuf;
    int   _bufsiz;
    char *_tmpfname;
};
typedef struct _iobuf FILE;

FILE *stdin;
FILE *stdout;
FILE *stderr

程序在启动时都会打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。典型的,他们被连接到用户的终端。

#include 
#include 

int main()
{
    char ch;
    printf("缓冲区的有效数据时%d\n", stdin->_cnt);// 0
    printf("指向缓冲区的指针%p\n", stdin->_ptr);//682DC700
    printf("缓冲区的起始地址%p\n", stdin->_base);//682DC700
    printf("缓冲区的大小%d\n", stdin->_bufsiz);//4096
    ch = getchar();// 输入:12345,相当于输入“12345\n”,ch去了一个"1", 缓冲区中海油“2345\n”
    printf("当前获取的字符%c\n", ch);//1
    printf("缓冲区的有效数据时%d\n", stdin->_cnt);//5
    printf("指向缓冲区的指针%p\n", stdin->_ptr);//682DC701,指针向前移动了一个字节
    printf("缓冲区的起始地址%p\n", stdin->_base);//682DC700
    printf("缓冲区的大小%d\n", stdin->_bufsiz);//4096
    ch = getchar();// 输入:12345,相当于输入“12345\n”,ch去了一个"1", 缓冲区中海油“2345\n”
    printf("当前获取的字符%c\n", ch);//2
    printf("缓冲区的有效数据时%d\n", stdin->_cnt);//4
    printf("指向缓冲区的指针%p\n", stdin->_ptr);//682DC702,指针再向前移动了一个字节
    printf("缓冲区的起始地址%p\n", stdin->_base);//682DC700
    printf("缓冲区的大小%d\n", stdin->_bufsiz);//4096
    fflush(stdin);// 清空缓冲区,有效数据清零,指针回到起始地址
    // rewind(stdin); 文件回到开头,有效数据清零,指针回到起始地址
    /*
    fflush和rewind做的操作实际上就相当于:
    stdin->_cnt = 0;
    stdin->_ptr = stdin->_base;
    */
    printf("缓冲区的有效数据时%d\n", stdin->_cnt);// 0
    printf("指向缓冲区的指针%p\n", stdin->_ptr);//682DC700
    printf("缓冲区的起始地址%p\n", stdin->_base);//682DC700
    printf("缓冲区的大小%d\n", stdin->_bufsiz);//4096

    system("pause");
}



你可能感兴趣的:(C/C++)