首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在freopen()之后从stdin获取输入

在freopen()之后从stdin获取输入
EN

Stack Overflow用户
提问于 2011-02-12 04:50:27
回答 3查看 10K关注 0票数 6

您好,我想知道如何在调用后再次从stdin获取输入:

代码语言:javascript
复制
freopen("Smefile.txt","r",stdin);

准确地说,我希望我的第一个程序的第一个部分应该从指定的文件中获取输入,下一部分将从stdin中获取。

像这样:

代码语言:javascript
复制
 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;

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-12 04:53:30

你不能。使用

代码语言:javascript
复制
FILE *input = fopen("Smefile.txt","r");

// read stuff from file

fclose(input);
input = stdin;

而不是。

当您在同一个流上混合使用C++和C风格的I/O时,这不会有什么帮助,我无论如何都不推荐这样做。

(如果你碰巧在Linux上,你可以重新打开/dev/stdin。(在Linux/Unix上,你也可以使用曾傑瑞·科芬的dup2技巧,但那更麻烦。)

票数 8
EN

Stack Overflow用户

发布于 2011-02-12 04:59:17

它很难看,而且(某种程度上)不可移植。您可以使用fileno来检索与stdin关联的文件描述符,并使用dup来保存它的副本。然后你做你的freopen。完成后,使用dup2stdin的文件描述符与之前保存的文件描述符关联起来,这样标准流就会回到它开始的地方。

票数 3
EN

Stack Overflow用户

发布于 2011-02-12 07:39:30

以这种方式混合C标准音频和C++ IO流是无效的。结果是不确定的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4973905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档