Reputation: 25109
I am using the following code:
#include <stdio.h>
#include <iostream>
using namespace std;
int main ()
{
char c ;
c = cin.get() ;
do {
cout.put(c) ;
c = cin.get() ;
} while ( !cin.eof()) ;
cout << "coming out!" << endl;
return 0;
}
Problem with the above code is, its not getting out of loop, which means its not printing "coming out". Anybody can help why it is so? I am testing this program on mac and linux.
Thanks
Upvotes: 2
Views: 1913
Reputation: 6797
I'm going to make a guess about intent, because there's nothing wrong with that code but it's probably not what you intended, and will also suggest a while loop uhhh.. while I'm at it.
#include <stdio.h>
#include <iostream>
using namespace std;
bool is_terminator(char ch)
{
return ch != '\n' && ch != '\r';
}
int main ()
{
char ch;
while (cin.get(ch) && !is_terminator(ch) )
cout.put(ch);
cout << "coming out!" << endl;
}
Upvotes: 0
Reputation: 11814
It does print "coming out" provided that it gets the end-of-file. It will go out of the loop if you redirect a file to it with
./program < file
or send the end-of-file yourself, by hitting ctrl+d (linux) or ctrl+z (dos)
Upvotes: 5
Reputation: 59841
Works perfectly well here :) If you run this in a terminal you have to send EOF to this terminal. On *nix this would be Control + D. I cannot say anything about Windows unfortunately.
Edit: As others have pointed out: Ctrl + Z would be the Windows way of sending EOF.
Upvotes: 2
Reputation: 888303
Standard in never hits EOF, unless you press Ctrl+Z.
Therefore, cin.eof()
is always false.
To fix it, press Ctrl+Z to send an End-Of-File character.
Alternatively, you could change the condition. (eg, while(c != '\n')
)
Upvotes: 3
Reputation: 10111
You need to press CTRL-Z to simulate EOF (End-of-File) and to exit the loop.
If you don't press CTRL-Z, the loop will continue to run forever.
Upvotes: 1