簡體   English   中英

在freopen()之后從stdin獲取輸入

[英]Taking input from stdin after freopen()

嗨,我想在調用后如何再次從stdin獲取輸入:

freopen("Smefile.txt","r",stdin);

確切地說,我希望我的第一個程序中的第一個應該從指定文件中獲取下一部分將從stdin獲取的輸入。

喜歡:

 int a,b;
 freopen("Smefile.txt","r",stdin);
 scanf("%d",&a);

 {
   //some block here such that the next cin/scanf takes b from standard input
 }
 cin>> b;
 cout <<a<<" "<<b;

有任何想法嗎?

你不能。 采用

FILE *input = fopen("Smefile.txt","r");

// read stuff from file

fclose(input);
input = stdin;

代替。

當您在同一個流上混合使用C ++和C風格的I / O時,這無濟於事,我不建議這樣做。

(如果你碰巧在Linux上,你可以重新打開/dev/stdin 。在Linux / Unix上,你也可以使用Jerry Coffin的dup2技巧,但這甚至更加毛躁。)

它很丑陋而且(有點)非便攜式。 您使用fileno來檢索與stdin關聯的文件描述符,並使用dup來保留它的副本。 然后你做你的freopen 完成后,使用dup2stdin的文件描述符與先前保存的文件描述符相關聯,因此標准流指向它開始的位置。 有關演示代碼,請參閱C片段集合中的redirect.c

以這種方式混合C stdio和C ++ IO流是無效的。 結果未定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM