kostenloser Webspace werbefrei: lima-city


Schleifenabbruchbedingung - Enter drücken?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    brainfactory-team

    brainfactory-team hat kostenlosen Webspace.

    Hallo,

    ich will eine while-Schleife (in c++, konsolenanwendung) solange laufen lassen bis die Enter-Taste gedrückt wird. Kann mir jemand sagen, wie ich das umsetzen kann? Ich finde i-wie über Google nichts, das mir weiterhilft.

    mfg hozevi23
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Also ich hab zwar nicht viel ahnung von C aber du könntest in jedem durchgang abfragen ob die Enter taste gedrückt wurde (ka wie das geht) und wenn sie gedrückt wurde (True) wird die schleife beendet. Die Abfrage könnte man auch in einen Thread velagern dann würde es "Zeit" sparen.

    Hoffe ich könnte dir helfen

    Beitrag zuletzt geändert: 29.4.2010 18:11:50 von krisi12345
  4. Autor dieses Themas

    brainfactory-team

    brainfactory-team hat kostenlosen Webspace.

    ja nur ich weiß eben nicht wie ich abfragen kann, ob an der Tastatur, also ob im Tastaturpuffer (oder so...) eine Taste gefrückt wurde. Wie kann ich das einlesen?
  5. Sag bitte zuerst um was für eine Anwendung es sich handelt. Konsole? Win32?
  6. Autor dieses Themas

    brainfactory-team

    brainfactory-team hat kostenlosen Webspace.

    ... will eine while-Schleife (in c++, konsolenanwendung) solange ...


    wie ich schon geschrieben habe handelt es sich um eine Konsolenanweisung^^
  7. Ooops, das muss ich übersehen haben.

    Also, mein Ansatz wäre, dass du mit getchar() (stdio) den aktuellen Character holst und auf Newline prüfst.
    Also sowas:
    while (getchar() != 0x0A) { // \n

    }
  8. //Funktioniert wahrscheinlich nur unter UNIX-Systemen
    #include <iostream>
    #include <cstdio>
    #include <signal.h>
    
    int main( int argc, char ** argv ) {
    	int pid = fork();
    	if( pid ) { //Elternprozess
    		while( getchar() != '\n' ) {}
    		kill( pid, SIGTERM );
    		return 0;
    	} //Kindprozess
    
    	while( 1 ) {
    		std::cout << "bla\n";;
    	}
    
    	return 0;
    }

    Erläuterung: Mit fork() wird der Prozess kopiert, so dass 2 Prozesse laufen. Der eine Prozess wartet auf die Tastatureingabe und der zweite führt die Endlosschleife aus.
    Sobald der erste Prozess eine Enter-Eingabe empfängt, sendet er ein SIGTERM an den anderen Prozess mit der Endlosschleife und beendet sich selber.
  9. Du müsstest halt eine Keyboard abfrage machen, Bladehunters code hat in
    meinem Programm auch geholfen allerdings ist es wirklich nur für unix.

    Aber es gibt, wenn ich mich richtig entsinne, soetwas schon in na funktion in
    der Winapi.
  10. Ich würde das über Qt machen. Du kannst ja trotz Konsolenanwendungen einige Bibliotheken einbinden. :)
    Ich denke, wenn du das nämlich wie meine Vorgänger machst, wird ja dauerhaft direkt hintereiander immer wieder die Bedingen geprüft.
    Wenn du das über einen QTimer machst, den du immer wieder hochsetzt, kannst du wenigstens ein paar Millisekunden Freiraum setzen. Und ich finds stilischtisch schöner, da du es dann auch erweitern kannst, mit anderen Funktionen. :)
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!