Anzeige:
Ergebnis 1 bis 10 von 10

Thema: while(!eingabegemacht)

  1. #1
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40

    while(!eingabegemacht)

    HI!

    Habe wieder mal ein Problem... es gibt zwar viele Beispiele, aber bei mir will es irgendwie net -.-

    Meine PRoblemlösung muss eine while() - Schleife sein welche immer läuft (endlos) und darin möchte ich Abfragen machen, ob der User eine EIngabe macht oder nicht... wenn ja dann einlesen, sonst einfach weiter machen, bis wieder abgefragt wird unsw.

    Das habe ich jetzt gerade (nach langem Pröbeln):
    Code:
    while(1)
    	{
    		cout << "\t[!]Your Message:\n" << endl;
    		cout << "\t\t";
    
    		getcint = getch();
    		
    		if(getcint == ERR)
    		{
    			cout << " No data!!!!!!!!!" << endl;
    		}
    		else
    		{
    			getline(cin, msg);
    		
    			if((strcmp(msg.c_str(),"/exit")) == 0) { break; }
    	
    			if((strcmp(msg.c_str(),"")) != 0)
    			{
    				if (send(my_socket, msg.c_str() ,BUFFER-1,0) == -1) 
    				{
    					cout << "[-] Error cant send data\n" << endl;
    				}
    				else
    				{
    					cout << "\t\t[+] Successfully sendet!\n" << endl;
    				}
    			}
    			else
    			{
    				cout << "[-] No data to send" << endl;
    			}
    		}
    	}
    Jedoch sieht so der Output aus:
    Code:
    [!]Your Message:
    
                     No data!!!!!!!!!
            [!]Your Message:
    
                     No data!!!!!!!!!
            [!]Your Message:
    (endlosschlaufe)

    ich benutze g++.

    Kann mir jemand weiterhelfen, fände es wirklich super!

    cheers

    gEry

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    1) nicht namespaces std verwenden, sondern jeweils hinschreiben (erspart die etwaige Fehler...)

    2) Versuch mal anstatt getcint ein

    std::cin>>

    Genaue Verwendung solltest du problemlos finden.

    MfG Bischi

    PS: cin erwartet Eingabe: Somit hast du keine Schleife mehr, die sehr schnell läuft und unnötig Ressourcen verbraucht.

    PS2: Anstatt while(1) ist es übersichtlicher ein while(true) zu verwenden

    PS3: sended und nicht sendet ...
    Geändert von bischi (02-07-2005 um 10:34 Uhr)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    1. ja, da hast du wohl recht

    2. getcint ist eine von mir angelegte Variable, das hat mit std::cin>> nix zu tun... ausserdem ist bei std::cin>> das problem, dass das programm auf eine Eingabe wartet und den Rest 'blockiert', was nicht sein darf

    PS: wie würdest du dann das Problem lösen?

    PS2:subjektiv

    PS3: Danke

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Meine PRoblemlösung muss eine while() - Schleife sein welche immer läuft (endlos) und darin möchte ich Abfragen machen, ob der User eine EIngabe macht oder nicht... wenn ja dann einlesen, sonst einfach weiter machen, bis wieder abgefragt wird unsw.

    [...]

    Jedoch sieht so der Output aus:

    Code:
    [!]Your Message:

    No data!!!!!!!!!
    [!]Your Message:

    No data!!!!!!!!!
    [!]Your Message:


    (endlosschlaufe)
    Ich sehe da keine Diskrepanz zwischen der Beschreibung und dem was das Programm macht. Bleibt die Ausgabe denn wirklich gleich, auch wenn du eine Taste tippst? Vielleicht geht das Problem ja weg, wenn du dir noch einmal klar machst, was du eigentlich haben möchtest?

    Ansonsten würde ich noch dazu raten, die Fehlerbehandlung zu vervollständigen.

    Ach, noch was: Warum nimmst du eigentlich strcmp wenn ein std::string am Vergleich beteiligt ist?

  5. #5
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    Hi!

    1. Ja das Programm in der endlosschlaufe nimmt gar keine eingaben an -.-

    2. Was ich möchte: Eine Endlosschlaufe, welche einfach immer läuft und sobald der user eine eingabe macht soll diese eingelesen werden und danach weiterlaufen... klar?

    3. Zu deiner String Frage... hmm die Stringfunktion,zum Strings vergleichen... weiter oben steht schon using namespace std; (sry kenne mich da noch nicht so gut aus... -.-)

    cheers

  6. #6
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    1. Ja das Programm in der endlosschlaufe nimmt gar keine eingaben an -.-
    Also bei mir tuts das. Ich habe nur kleine Änderungen an deinem Programm gemacht, um ein übersetzbares und lauffähiges Programm zu bekommen.
    2. Was ich möchte: Eine Endlosschlaufe, welche einfach immer läuft und sobald der user eine eingabe macht soll diese eingelesen werden und danach weiterlaufen... klar?
    Soetwas würde ich nicht unbedingt für sinnvoll halten, hat bischi ja auch schon was zu geschrieben. Aber gut, sowas hast du ja bereits. Wenn bei getline probleme auftauchen solltest du möglicherweise überprüfen ob sich Ncurses und die C++-Bibliothek nicht in die Quere kommen.
    3. Zu deiner String Frage... hmm die Stringfunktion,zum Strings vergleichen... weiter oben steht schon using namespace std; (sry kenne mich da noch nicht so gut aus... -.-)
    Ich würd ja einfach if(msg == "lksdfjlksadjfo") machen.

  7. #7
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    1. dann zeig doch was du gemacht hast!? naja bis auf das geht alles ja...

    2. Wie kann ich schauen, ob die sich in die Quere kommen? und sag doch bitte wie du es machen würdest, da du es ja anderst machen möchtest!

    3. ??? und hä? wo genau? wieso?

  8. #8
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    PS3: sended und nicht sendet ...
    Noch nicht ganz:

    send ist ein unregelmäßiges Verb. Durchkonjugiert wird es mit:

    1. Form: send
    2. Form: sent
    3. Form: sent

    Korrekt wäre z. B. : "Data has been sent successfully!"

    Mehr kann ich leider auch nicht beitragen...

  9. #9
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    1. dann zeig doch was du gemacht hast!? naja bis auf das geht alles ja...
    Ich habe jetzt einfach mal eine Datei in den Anhang getan. Das .txt am Ende ist nur wegen dem Board. Sieht alles ein bisschen hässlich aus, weil ich nur so auf die Schnelle experimentiert habe, und Curses vorher nie benutzt habe.
    2. Wie kann ich schauen, ob die sich in die Quere kommen? und sag doch bitte wie du es machen würdest, da du es ja anderst machen möchtest!
    Ersteres z.B. durch Ausprobieren. Das habe ich auch gemacht. Im meinem Code kannst du ja schauen, wie man den Curses-Mode kurzeitg verlassen kann. Ich gebe aber keine Garantie für Richtigkeit, wie gesagt, ich habe Curses vorher nie benutzt. Zweitens, das Problem bei deinem Ansatz *könnte* sein, dass du dir so aussuchen kannst, bzw. musst, ob du eine Schleife haben willst, die entweder schnell durchläuft, und dabei viel CPU-Zeit allein für das Iterieren selber verbraucht, und wenig Zeit für Arbeit zwischen den einzelnen Schleifendurchläufen lässt; Oder ob du eine Schleife hast die langsam läuft, und so die Abbruchbedingung selten bzw. unregelmäßig überprüft. Ein Ausweg daraus könnte z.B. sein, mehrere Threads zu benutzen. Oft ist es aber auch einfach so, das man durchaus auf die Eingabe warten kann. Das machen getline und andere Funktionen aus Standard-C und C++ ja normalerweise auch. Nun hattest du allerdings gesagt das das in deinem Fall nicht geht. Dann wirst du vermutlich einfach in dem Fall das getch "ERR" zurückliefert etwas machen, was vernünftig "getimed" ist.
    3. ??? und hä? wo genau? wieso?
    Wo: Da wo du in deinem Snippet strcmp verwendet hast.
    Wieso: Weil es besser lesbar ist und du evtl. dann nicht <string.h> einbinden musst.

  10. #10
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von michael.sprick
    Noch nicht ganz:

    send ist ein unregelmäßiges Verb. Durchkonjugiert wird es mit:

    1. Form: send
    2. Form: sent
    3. Form: sent

    Korrekt wäre z. B. : "Data has been sent successfully!"

    Mehr kann ich leider auch nicht beitragen...
    Is aber vielleicht Mehrzahl...

    MfG Bischi

    [EDIT]Ist natürlich Blödsinn. Sent ist schon richtig, jedoch gibt es anscheinend noch viele Leute, die das falsch machen (siehe Google...) [/EDIT]
    Geändert von bischi (03-07-2005 um 11:09 Uhr)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •