Important: Please read the Qt Code of Conduct -

My console program behaves different on linux and windows

  • Hello!

    I have written a very simple menu console program that connects to a mysql db over internet, it works.. just something is not working, since this is a console program it uses std::cin.get() to catch inputs, this happens::

    On Windows (works fine)
    Program ask user for a name and wait...
    user input name
    success on saving the name into a std::string
    program ask for telephone and wait...
    user input telephone
    success on saving the telephone into a std::string

    On Linux
    Program ask user for a name but not wait..
    program ask for telephone and wait...

    as you can see, there is no way the user can input a name...
    i'm flusshing stdin using fflush(stdin) either win and linux, its suppose they must to work the same way..

    Any idea?
    Thanks so much!

    Note my program is a QApplication console program.

  • and you included no code for us to see your probable misuse of the cin stream object.

  • Lifetime Qt Champion

    This post is deleted!

  • Hm.. may i misunderstood the use of cin object... may be you're right, but Windows is not complaining..
    I didn't because code is so long, but i could isolate this:

    //Pide al usuario la informacion del nuevo centro
        std::vector<std::string> campos{"Region     :   ", "Nombre     :   ", "Direccion  :   ", "Telefono   :   ", "Email      :   ", "Contrasena :   "};
        for (std::vector<std::string>::iterator it = campos.begin(); it != campos.end(); ++it){
            if (*it == "Region     :   ") continue;
            std::cout << *it;
            char* t = new char[256];
            std::cin.getline(t, 256);
            delete [] t;
            std::cout << "\n";

    Here is the full version:
    link text

    Please, don't tell me that my code is a mess , i know it.. , i wrote it on the fly, the point is that it works on Windows but not on Linux.. :)

    I have created a short video explanation:
    link text

    Thanks again...

  • @U7Development said in My console program behaves different on linux and windows:


    I don't know, but may I suggest you Google for cin.getline, possibly with "not working". There seems to be quite a few refernces out there saying "it sometimes doesn't work". Various reasons. For one thing, I don't know how well fflush(stdin) plays with cin level, stdin & cin aren't the same thing. I have seen (old) posts like Some suggestion that things like


    might play better? The behaviour difference between Windows vs Linux is presumably down to implementation, even different compilers (with different runtime libraries) might vary?

  • This is my OCD influenced rewrite of your code, and it works fine in c++ on Linux. I did change to c++11 constructs because they are more elegant, but I don't really see any problem with your algorithm in the code you supplied, which makes me believe the problem is something else that is influencing the behaviour in a way that makes you think it is a a cin problem, but maybe is not.

        char t[256];
        for (auto it : campos) {
            if (it == "Region     :   ") continue;
            cout << it;
            cin.getline(t, 256);
            // should really check the error state of cin before adding element
            centro_actual.push_back(t);  // static_cast<string>(t));
            cout << "\n";

  • Ok thanks!.. i will check both answers..

Log in to reply