[英]How does the data flow from input stream into the input buffer during scanf() in C?
[英]Does the scanf empty the buffer after reading the input data (in C)?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[1024];
int a,b;
int i;
setbuf(stdin, buf);
scanf("%d %d", &a, &b);
for(i=0; buf[i]!='\n'; i++){
putchar(buf[i]);
}
putchar('\n');
return 0;
}
當我輸入值1 2
時,我使用setbuf
來確定在讀取這些值后緩沖區是否真的被清除了。
但是,當我打印出buf
時,我輸入的值在buf
中保持不變。 也就是說,output 是1 2
為什么會這樣?
如果您能回答,我將不勝感激。
以下是 C 標准對 function setbuf
的描述:
7.21.5.5
setbuf
function概要
#include <stdio.h> void setbuf(FILE * restrict stream, char * restrict buf);
描述
除了不返回任何值外,
setbuf
function 等同於調用setvbuf
function,調用時mode
的值為_IOFBF
,size
的值為BUFSIZ
,或者(如果buf
是 null 指針),mode
的值為_IONBF
。退貨
setbuf
function 不返回任何值。
7.21.5.6
setvbuf
function概要
#include <stdio.h> int setvbuf(FILE * restrict stream, char * restrict buf, int mode, size_t size);
描述
setvbuf
function 只能在 stream 指向的stream
與打開的文件相關聯之后以及在對 stream 執行任何其他操作(對setvbuf
的不成功調用除外)之前使用。參數mode
決定了 stream 將如何被緩沖,如下:_IOFBF
使輸入/輸出完全緩沖;_IOLBF
導致輸入/輸出進行行緩沖;_IONBF
導致輸入/輸出無緩沖。 如果buf
不是 null 指針,則可以使用它指向的數組而不是setvbuf
分配的緩沖區 function 277)並且參數size
指定數組的大小; 否則,size
可以確定setvbuf
function 分配的緩沖區的大小。數組的內容在任何時候都是不確定的。退貨
setvbuf
function 在成功時返回零,如果為mode
給出了無效值或請求無法兌現,則返回非零。
277) 緩沖區的生命周期必須至少與打開的 stream 一樣長,因此 stream 應該在塊退出時釋放具有自動存儲持續時間的緩沖區之前關閉。
它遵循:
buf
的長度應為BUFSIZ
,可以不同於1024
。stdin
在 function main
返回之前沒有關閉。 它應該定義為static char buf[BUFSIZ];
FILE
結構中都有指針或偏移量,以跟蹤緩沖區的已用和可用部分。 setbuf
是傳統的 function,用途有限, setvbuf
在緩沖模式和緩沖區大小方面優於 select,在極少數情況下它可能有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.