在写输入的时候遇到一个问题,我们可能会不小心多输入了数据,这样就会影响到我们接下来的输入输出结果,怎么来消除缓冲区中多余的数据?
setbuf函数可以实现setbuf(stdin,NULL)清空缓冲区内容。
具体的setbuf用法如下:
void setbuf(FILE *stream,char *buffer);
- #include <stdio.h>
- int main( void )
- {
- char buf[BUFSIZ];
- FILE *stream1, *stream2;
- fopen_s( &stream1, "data1", "a" );
- fopen_s( &stream2, "data2", "w" );
- if( (stream1 != NULL) && (stream2 != NULL) )
- {
- // "stream1" uses user-assigned buffer:
- setbuf( stream1, buf ); // C4996
- // Note: setbuf is deprecated; consider using setvbuf instead
- printf( "stream1 set to user-defined buffer at: %Fp\n", buf );
- // "stream2" is unbuffered
- setbuf( stream2, NULL ); // C4996
- printf( "stream2 buffering disabled\n" );
- _fcloseall();
- }
- }
- stream1 set to user-defined buffer at: 0012FCDC
- stream2 buffering disabled
The setbuf function controls buffering for stream. The stream argument must refer to an open file that has not been read or written. If the buffer argument isNULL, the stream is un-buffered. If not, the buffer must point to a character array of length BUFSIZ, where BUFSIZ is the buffer size as defined in STDIO.H. The user-specified buffer, instead of the default system-allocated buffer for the given stream, is used for I/O buffering. The stderr stream is un-buffered by default, but you can use setbuf to assign buffers to stderr.
转载于:https://blog.51cto.com/jun0213/1062268