如果我要打印提示到stdout:fgets何時開始閱讀?
printf("> ");
,然後我說
fgets(tester, 80, stdin);
將與fgets讀出整條生產線包括「>」或之後將開始?
如果我要打印提示到stdout:fgets何時開始閱讀?
printf("> ");
,然後我說
fgets(tester, 80, stdin);
將與fgets讀出整條生產線包括「>」或之後將開始?
fgets不會讀取任何內容,因爲printf將在STDOUT而不是STDIN上寫入。
提示是輸出(在stdout
)。 fgets
正在讀取輸入從stdin
。所以不,它不會讀你的提示。
您的終端顯示stdout
,stderr
和stdin
所有在一起,但這並不意味着它們之間沒有潛在的區別。
stdout
通常行緩衝,和printf("> ");
缺乏新線,因此輸出可能不是終端顯示器上出現,直到以後。 fflush(stdout)
以確保它在fgets()
之前輸出。
printf("> ");
fflush(stdout);
fgets(tester, 80, stdin);
進一步說明:您的終端顯示'stdout','stderr'和'stdin',但這並不意味着它們之間沒有潛在的區別 – Alexander
@Alexander:好的。隨意編輯它(即使它不是社區維基答案,但特別如此)。 –
第printf
號將反映stdout
。它永遠不會影響你的stdin
。 str
緩衝區將反映您在>
之後作爲輸入提供的所有字符。
試驗同樣可以做到這樣的:
#include<stdio.h>
int main() {
char str[80];
printf(">");
if(fgets (str, 60, stdin)!=NULL)
{
puts(str);
}
return 0;
}
都不是。寫入'stdout'的數據通常不可用於從(同一進程的)'stdin'回讀。 –