简体   繁体   中英

cin.get() is not getting out of loop

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

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)

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') )

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.

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.

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM