Problem mit gets()



  • Nabend zusammen,

    Folgendes problem:
    Ich würde gerne ein Konsole prog schreiben das mit auf Zeichenketten reagiert.
    Beispiel:
    Ich gebe 'exit' ein und er soll dann z.B. das prog beenden

    Mein Code bis jetzt:

    #include "Konsole4.h"
    
    void main( void )
    {
    	char String[50];
    
    	do
    	{
    		printf(":> ");
    		gets(String);
    
    	} while( String != "exit" );
    
    	printf("Programm wird beendet...\n");
    	system("PAUSE");
    }
    

    Er soll dann auch z.B. in der do-while auf 'start' eine Action machen also
    if(String == "start") MachDas();

    Ja aber irgendwie klappt das so nicht, könnt ihr mir da helfen?
    Hatte es auch schon mit cin >> String; 😞

    Danke



  • Huhu,

    hab ne Lösung gefunden:

    #include "Konsole4.h"
    #include <string>
    
    using namespace std;
    
    void main( void )
    {
    	char String[10];
    	std::string sCommand;
    
    	do
    	{
    		printf(":> ");
    		gets(String);
    		sCommand = String;
    
    		if( sCommand == "start" ) printf("Starte!\n");
    
    	} while( sCommand != "exit" );
    
    	printf("Programm wird beendet...\n");
    	system("PAUSE");
    }
    

    Kann mir einer erklären warum es so funktioniert?



  • mach besser so:

    #include <string>
    #include <iostream>
    using namespace std;
    
    int main()
    	{
    	string sCommand;
    
    	do {
    		cout<<":> ";
    		cin>>sCommand;
    		if (sCommand=="start")	cout<<"\nStarte!\n";
    	} while (sCommand!="exit");
    
    	cout<<"Programm wird beendet..."<<endl;
    	cin.get();
    
    	return 0;
    	};
    


  • Peppie schrieb:

    Kann mir einer erklären warum es so funktioniert?

    Für dir Klasse std::string ist der Vergleichsoperator == mit einem char-array definiert ( vergleicht Zeichenweise ).
    Wenn du aber ein character array verwendest vergleichst du den Zeiger auf String mit den Zeiger auf die Konstante "exit" und die werden niemals auf die gleiche Adresse zeigen.
    Kurt.



  • Moin,

    Vielen Dank! 👍


Anmelden zum Antworten