2017-03-10 30 views
-1

如果我要打印提示到stdout:fgets何時開始閱讀?

printf("> "); 

,然後我說

fgets(tester, 80, stdin); 

將與fgets讀出整條生產線包括「>」或之後將開始?

+1

都不是。寫入'stdout'的數據通常不可用於從(同一進程的)'stdin'回讀。 –

回答

0

fgets不會讀取任何內容,因爲printf將在STDOUT而不是STDIN上寫入。

5

提示是輸出(在stdout)。 fgets正在讀取輸入stdin。所以不,它不會讀你的提示。

您的終端顯示stdoutstderrstdin所有在一起,但這並不意味着它們之間沒有潛在的區別。

stdout通常行緩衝,和printf("> ");缺乏新線,因此輸出可能不是終端顯示器上出現,直到以後。 fflush(stdout)以確保它在fgets()之前輸出。

printf("> "); 
fflush(stdout); 
fgets(tester, 80, stdin); 
+2

進一步說明:您的終端顯示'stdout','stderr'和'stdin',但這並不意味着它們之間沒有潛在的區別 – Alexander

+1

@Alexander:好的。隨意編輯它(即使它不是社區維基答案,但特別如此)。 –

0

printf號將反映stdout。它永遠不會影響你的stdinstr緩衝區將反映您在>之後作爲輸入提供的所有字符。

試驗同樣可以做到這樣的:

#include<stdio.h> 

int main() { 

char str[80]; 
printf(">"); 
if(fgets (str, 60, stdin)!=NULL) 
    { 
     puts(str); 
    } 
    return 0; 
}