您好,我想知道如何在调用后再次从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;有什么想法吗?
发布于 2011-02-12 04:53:30
你不能。使用
FILE *input = fopen("Smefile.txt","r");
// read stuff from file
fclose(input);
input = stdin;而不是。
当您在同一个流上混合使用C++和C风格的I/O时,这不会有什么帮助,我无论如何都不推荐这样做。
(如果你碰巧在Linux上,你可以重新打开/dev/stdin。(在Linux/Unix上,你也可以使用曾傑瑞·科芬的dup2技巧,但那更麻烦。)
发布于 2011-02-12 04:59:17
它很难看,而且(某种程度上)不可移植。您可以使用fileno来检索与stdin关联的文件描述符,并使用dup来保存它的副本。然后你做你的freopen。完成后,使用dup2将stdin的文件描述符与之前保存的文件描述符关联起来,这样标准流就会回到它开始的地方。
发布于 2011-02-12 07:39:30
以这种方式混合C标准音频和C++ IO流是无效的。结果是不确定的。
https://stackoverflow.com/questions/4973905
复制相似问题