Eingabe Stream, cin, leeren, löschen, resetten
-
Hallo zusammen,
ich habe eine Konsolenanwendung, welche ein anderes Programm startet (Create Process in neuer Console)..
Wenn der Benutzer jedoch in der Standard Console (also in meinem ursprünglichen Programm), während dieser Zeit etwas drückt, wird steht dies beim nächsten "cin >>" als Eingabe.
Wie kann ich also Cin leeren, löschen, resetten...?
Habe schon ein paar Sachen ausprobiert, allerdings immer ohne Erfolg.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.clear(); //fehlerflags löschen
oder
while(getchar() != '\n');
Benutze GCC als Compiler:
Thread model: win32
gcc version 3.4.5 (mingw-vista special)Wäre super wenn mir jemand helfen könnte...
-
gab da einen Trick. IIRC war das
std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail());
-
Bringt leider nichts... folgend mein Code..
Code:
DWORD lpExitCode; STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) "program.exe", // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE CREATE_NEW_CONSOLE, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure ) { printf( "CreateProcess failed (%d).\n", GetLastError() ); } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); GetExitCodeProcess(pi.hProcess, &lpExitCode); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); cout << "lpExitCode: " << lpExitCode ; if (lpExitCode == 202) { i_status = 0; } // --------------------------------------------------------------------------------------------------------- // // --------------------------------------------------------------------------------------------------------- // // reset i to 1 if ( (ui_counter == (i_hostentrylines-1)) && (i_status == 1) ) { do { cout << "\n\n ---------------------------------------------------------------------\n"; cout << "\n\n ---------------------------------------------------------------------\n"; cout << "\n MENU"; cout << "\n Soll das Programm weiterhin versuchen eine Verbindung herzustellen,\n oder wollen Sie das Programm beenden."; cout << "\n\n [ 1 ] Verbindung herstellen"; cout << "\n\n [ 0 ] Programm beenden"; cout << "\n\n Ihre Eingabe: "; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); cin >> c_input; etc... etc...
-
Anscheinend ist die Eingabe noch im Tastatur (oder ähnliches) Buffer. D.h. ich bräuchte eine Möglichkeit, solange Zeichen wegzuwerfen, bis keine mehr ankommen.
Jemand eine Idee?
-
printf und cout in einem Quelltext - ist das eine gute Idee?
-
Habe genau das selbe Problem mit cin. Irgendwelche Lösungen?
-
Kojak schrieb:
Habe genau das selbe Problem mit cin. Irgendwelche Lösungen?
std::cin.clear(); std::cin.ignore(std::limits<std::streamsize>::max());
edit: Nein, das war falsch. Beschreib mal dein genaues Problem. Die Frage die du hier wieder ausgebuddelt hast, war damalsch schon nicht gut gestellt. Bei einem Stream kann man schlecht von Leeren, Resetten, usw. sprechen. Zwar macht mein Code genau das, aber dann ist er auch leer im Streamsinne und du wirst nie wieder etwas daraus lesen können.