Denkanstoss zu kleiner Optimierung



  • schmeiss' das 'hilf[]' array raus, dann wird es auf jeden fall kürzer...
    🙂



  • proggingmania:
    ja, dachte ich mir auch 😉
    es ist ja nur für anschauungszwecke 😃
    einer gibt nen string ein, und der andere darf die aufen aufmachen und ihn erraten *g*

    pale dog:
    hmmm... wenn ich hilf[] raushaue... wie soll ich dann überprüfen und ausgeben was schon geraten wurde, und was nicht? mir fehlt da jetzt die idee zu.



  • Die Anzahl der Versuche würde ich einschränken.
    Die Anzahl der Versuche darf ruhig kleiner sein, als die Anzahl der Buchstaben im Alphabet. 😉



  • Das entspricht einem Komfort-Galgen mit vielen extra Stützbalken.



  • Soviel ich weiß, gibt man auch nur einen Buchstaben ein.



  • #include <stdio.h>
    #include <string.h>
    
    #define GALGENBAU 10
    
    // Rückgabewerte
    
    // 1 Überlebt
    // 0 Schade
    int Galgenmaennchen( char* pcGesucht )
    {
    	char c; 
    	unsigned i = 0, n = 0;
    	char Puffer[50] = "0";
    
    	memset( Puffer, '-', strlen ( pcGesucht ) );
    
    	while( n++ < GALGENBAU )
    	{
    		printf("Versuch %d von %d ", n, GALGENBAU );
    		c =  getch( stdin );
    
    		for ( i = 0; i < strlen ( pcGesucht ); i++ )
    		{
    			if ( pcGesucht[i] == c )
    			{
    				Puffer[i] = c;
    			}
    		}
    
    		while ((c = getchar()) != EOF && c != '\n'); // Eingabepuffer leeren.
    
    		if ( strcmp( Puffer, pcGesucht ) == 0 )
    		{	
    			return 1;
    		}
    		printf("%s\n", Puffer );
    	}
    	return 0;
    }
    
    int main()
    {
    	char* pcGesucht = "Galgenmaennekieken"; // Nicht gucken!
    
    	if ( Galgenmaennchen( pcGesucht ) )  
    	{
    		printf("%s %s\n", pcGesucht, "nochmal Glueck gehabt.");
    	}
    	else
    	{
    		puts("Hehe, Du hast dich erhaengt.");
    	}
        return 0;
    }
    


  • Generell ist die Definition von Galgenmaennchen() Schrott, da in dieser Funktion niemand weiss, wie gross der Buffer pcGesucht ist weil eben nur eine Adresse bekannt ist.

    Besser wäre es, und ein solches Verhalten kann man sich gleich angewöhnen, einen zusätzlichen Parameter zu übergeben, der zeigt wie gross der Speicher von pcGesucht wirklich ist.



  • burzum schrieb:

    Generell ist die Definition von Galgenmaennchen() Schrott, da in dieser Funktion niemand weiss, wie gross der Buffer pcGesucht ist weil eben nur eine Adresse bekannt ist.

    Besser wäre es, und ein solches Verhalten kann man sich gleich angewöhnen, einen zusätzlichen Parameter zu übergeben, der zeigt wie gross der Speicher von pcGesucht wirklich ist.

    Die for-Schleife in Zeile 24 ist über die Größe des Puffers pcGesucht ganz gut informiert.
    🙂



  • in diesem konkreten Beispiel schon. Die wirkliche Größe eines Buffers mit strlen() festzustellen ist aber im seltesten Fall richtig.

    Beispiel:

    int func(char *p) {
    printf("%d\n",strlen(p));
    }
    
    int main()
    {
    char buf[1024];
    func(buf);
    }
    

    Auch wenn du vorher buf[] initialisierst, bekommst du falsche Ergebnisse.
    Darum lieber gleich so:

    int func(char *p,unsigned int len) {
    }
    
    int main()
    {
    char buf[1024];
    func(buf,sizeof(buf));
    }
    


  • In diesem Fall ist der String korrekt Null-Terminiert und daher ist hier strlen die
    einzig vernünftige Wahl.
    Besides wird hier kein Char-Array übergeben. Schliesslich wären bei einem z.B.
    10 Zeichen langen String in einem 1024 großem Array genau 1010 redundante Durchläufe in der Forschleife die Folge, verliesse man sich auf len = sizeof(buf)
    🙂


Anmelden zum Antworten