Hi I want to how can we take input from stdin
again after I invoke:
freopen("Smefile.txt","r",stdin);
Precisely I want my first in first of my program should take input from a designated file the next part would take from the stdin.
Like:
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;
Any ideas?
You can't. Use
FILE *input = fopen("Smefile.txt","r");
// read stuff from file
fclose(input);
input = stdin;
instead.
This won't help when you're mixing C++ and C-style I/O on the same stream, which I wouldn't recommend anyway.
(If you happen to be on Linux, you can reopen /dev/stdin
instead. On Linux/Unix, you can also use Jerry Coffin's dup2
trick, but that's even hairier.)
It's ugly and (sort of) non-portable. You use fileno
to retrieve the file descriptor associated with stdin
and use dup
to keep a copy of it. Then you do your freopen
. When you're done, you use dup2
to associate stdin
's file descriptor with the one you previously saved, so the standard stream points back where it started. See redirect.c from the C snippets collection for demo code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With