Commented in https://github.com/kripken/emscripten/issues/2959#issuecomment-248541547.
2016-09-21 6:32 GMT+03:00 Grant Rostig <grantrost...@gmail.com>: > Hi, > > > printf and cout are not flushed before input is prompted at the command > line. > > > This problem exists in chrome and firefox running on linux fedora 24. Also > even running the a.out.js program in node, has the same problems. > > > This example code works fine in native linux however with emscrpten > nothing works as expected. However using \n does improve the situation by > showing the input prompt before waiting for keyboard input. > > > All systems and software are fully updated.This problem has been reported > on this list since 2013. I read all the suggestions on multiple posts and > nothing has worked, short of re-writing in asynchronous javascript (which I > have not attempted). > > > Here is the code I wrote to demonstrate that none of the suggestions that > I found work: > > > Thanks in advance for any help. > > ++Regards, Grant > > > #include <iostream> > #include <string> > #include <stdio.h> > > void get_input_cout_nl(std::string& ttyinput_ref) { > std::cout << "Print hello world output via cout_nl? (y/n):\n"; > std::cin >> ttyinput_ref; > } > > void get_input_cout_endl(std::string& ttyinput_ref) { > std::cout << "Print hello world output via cout_endl? (y/n):" << > std::endl; > std::cin >> ttyinput_ref; > } > > void get_input_cout_flush(std::string& ttyinput_ref) { > std::cout << "Print hello world output via cout_flush? (y/n):" << > std::flush; > flush(std::cout); // doesn't help > std::cin >> ttyinput_ref; > } > > void get_input_cout(std::string& ttyinput_ref) { > std::cout << "Print hello world output cout? (y/n):"; > std::cin >> ttyinput_ref; > } > > void get_input_printf_nl(std::string& ttyinput_ref) { > printf("Print hello world output printf_nl? (y/n):\n"); > char temp[80]; > scanf("%s", temp); > ttyinput_ref = temp; > } > > void get_input_printf_flush(std::string& ttyinput_ref) { > printf("Print hello world output printf? (y/n):"); > fflush(stdout); > char temp[80]; > scanf("%s", temp); > ttyinput_ref = temp; > } > > void get_input_printf(std::string& ttyinput_ref) { > printf("Print hello world output printf_nl? (y/n):"); > char temp[80]; > scanf("%s", temp); > ttyinput_ref = temp; > } > > int main() > { > std::cin.tie(&std::cout); // does not change anything as far as I can > tell. > std::string ttyinput = {"default"}; > std::string yy = {"y"}; > for (int j = 6; j>=0; --j ) { // one can run these tests in either > order and get same result (I had thought that cout might mess up the stream > for printf, so tested each first) > switch (j) { > case 0: get_input_cout_nl( ttyinput); break; > case 1: get_input_cout_endl( ttyinput); break; > case 2: get_input_cout_flush( ttyinput); break; > case 3: get_input_cout( ttyinput); break; > > case 4: get_input_printf_nl( ttyinput); break; > case 5: get_input_printf_flush( ttyinput); break; > case 6: get_input_printf( ttyinput); break; > } > if (ttyinput == "y") { > std::cout << "Hello World!" << std::endl; > } else { > std::cout << "output not run." << std::endl; > } > } > return 0; > } > > > Output from node.js: > [grostig@localhost emsripten1]$ emcc -v > emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) > 1.36.0 > clang version 3.9.0 (https://github.com/kripken/emscripten-fastcomp-clang/ > 271ce598c3d1fe74efadc254f5be1b57edea9f41) (https://github.com/kripken/ > emscripten-fastcomp/ 61acfb230665464544f2e8db292f8999fc3c628c) > (emscripten 1.36.0 : 1.36.0) > Target: x86_64-unknown-linux-gnu > Thread model: posix > InstalledDir: /home/grostig/src/emsdk_portable/clang/fastcomp/build_ > master_64/bin > Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/6.1.1 > Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/6.1.1 > Candidate multilib: .;@m64 <https://github.com/m64> > Candidate multilib: 32;@m32 <https://github.com/m32> > Selected multilib: .;@m64 <https://github.com/m64> > INFO:root:(Emscripten: Running sanity checks) > [grostig@localhost emsripten1]$ > > [grostig@localhost emsripten1]$ emcc -std=gnu++11 main.cpp > [grostig@localhost emsripten1]$ node ./a.out.js > y > Print hello world output printf_nl? (y/n):Hello World! > y > Print hello world output printf? (y/n):Hello World! > Print hello world output printf_nl? (y/n): > y > Hello World! > y > Print hello world output cout? (y/n):Hello World! > y > Print hello world output via cout_flush? (y/n):Hello World! > Print hello world output via cout_endl? (y/n): > y > Hello World! > Print hello world output via cout_nl? (y/n): > y > Hello World! > > > > > > > > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.