Warum reagiert das Programm nicht auf meine eingaben?

Prophet05

Erfahrenes Mitglied
Moin!

Ich wollte mir ein Programm schreiben bei dem ich eine art eingabeaufforderung habe in die ich die ganze Zeit etwas eingeben kann. Auch wenn im hintergrund etwas anderes gemacht wird.
Das hier ist das Programm:
Code:
#include <cstdio>
#include <string>
#include <iostream>

using namespace std;

int main(void)
{
	string buffer = "";

	cout << "> ";

	while(true)
	{
		string command = "";
	
		int c = 0;
		while((c = getchar()) != EOF)
		{
			if(c != '\n')
			{
				buffer += c;
			}
			else
			{
				command = buffer;
				buffer.clear();
				cout << "> ";
			}	
		}
		
		if(command == "quit")
		{
			cout << "Hallo!" << endl;
			exit();
		}	
	}

	return 0;
}

Das ganze funktioniert soweit fehlerfrei. Nur irgendwie beendet er das programm nach der eingabe von "quit" nicht. Warum?

Gruß, Prophet05
 
Habe ich breits aber es gibt ja noch nicht einmal "Hallo!" aus. Das müsste es ja sogar machen wenn exit nicht funktioniert.

EDIT: Ich habe auch schon versucht command auszugeben. In command steht genau das was ich eingegeben habe.
 
Zuletzt bearbeitet:
anstatt einer nicht enddeterminierten Schleife solltest Du hier das Kostrukt verwenden:

Code:
string command = "";
while(command != "quit")
	{[...]

das ist sauberer und schöner. Nicht enddeterminierende Schleifen sind selten guter Stil...
 
Ich habe das Programm jetzt entsprechend deinen vorschlägen abgewandelt:
Code:
#include <cstdio>
#include <string>
#include <iostream>

using namespace std;

int main(void)
{
	string buffer = "";
	string command = "";

	cout << "> ";

	while(command != "quit")
	{
		command = "";
	
		int c = 0;
		while((c = getchar()) != EOF) // Zeile 20
		{
			if(c != '\n')
			{
				buffer += c;
			}
			else
			{
				command = buffer;
				buffer.clear();
				cout << "> ";
			}	
		}
		
		if(command == "hallo")
		{
			cout << "Hallo!" << endl;
		}
	}

	return 0;
}

Das brachte aber nichts. Ich sehe immer noch kein hallo bei eingabe des commandos und das programm wird bei quit auch nicht beendet.

Die eingabe lese ich in Zeile 20
 
Code:
....
            else
            {
                command = buffer;
                buffer.clear();
                cout << "> ";
                break;
            }    
        ....
Also wenn ich bei mir ein break;
nach das cout setze funktioniert es.

Benny
 
Danke für die lösung des Problems!

Das bedeutet aber das das Programm immer noch auf eine eingabe wartet. Eigentlich wollte ich doch erreichen das es immer weiter macht und die eingaben nur nebenbei abfängt...

Kann ich den irgendwie am zurückgegeben zeichen von getchar erkennen ob kein weiteres zeichen eingegeben wurde?
 

Neue Beiträge

Zurück