Galgenraten



  • Kann mir jemand den folgenden Code berichtigen? Ich sitze jetzt schon ewig davor und es kommt nur "Run Command: line 1: 2235 Abort trap: 6 ./"2""2" "{@:3}"". Ich sehe den (oder die) Fehler einfach nicht, weshalb ich auch kein Minimalbeispiel geben kann.

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "time.h"
    
    int main(int argc, char const *argv[])
    {
    
        /* -------- Zufallszahlen */
        srand(time(NULL));
        int aufgabeAuswahl = rand() % 3;
    
        /* -------- Zaehler */
        int anzahlFehler = 0;
        int anzahlGesucht = 0;
    
        /* -------- Aufgaben */
        char gesuchtesWort[] = "";
        char raetselWort[] = "";
    
        int laenge = strlen(gesuchtesWort);
        int anzahlGefunden = 0;
    
        /* -------- Zufaellige Auswahl einer Aufgabe */
        switch (aufgabeAuswahl) {
            case 0: 
                strcpy(gesuchtesWort, "maus");
                strcpy(raetselWort, "maus");
            case 1: 
                strcpy(gesuchtesWort, "tastatur");
                strcpy(raetselWort, "tastatur");
            case 2: 
                strcpy(gesuchtesWort, "flachbettscanner");
                strcpy(raetselWort, "flachbettscanner");
            case 3: 
                strcpy(gesuchtesWort, "monitor");
                strcpy(raetselWort, "monitor");
        }
    
        /* -------- Eingabe */
        char eingabe[12];
        char eingabeBuchstabe;
    
        /* -------- Umwandlung in Unterstriche und in Großbuchstaben */
        for (int i = 0; i < laenge; i++)
        {
                if (gesuchtesWort[i] >= 'A' && gesuchtesWort[i] <= 'Z') {
                    raetselWort[i] = '_'; /* ersetzt die Buchstaben durch Unterstriche */
                    anzahlGesucht++;
                }
                else if (gesuchtesWort[i] >= 'a' && gesuchtesWort[i] <= 'z') {
                    gesuchtesWort[i] -= 32; /* CAPS */
                    raetselWort[i] = '_';
                    anzahlGesucht++;
                }
        }
    
        printf("\n\n\tG A L G E N R A T E N\n");
    
        while (anzahlGesucht > 0) {
            printf("\n%s\n", raetselWort);
            printf("Anzahl Fehler: %i\n", anzahlFehler);
            printf("Einen Buchstaben eingeben: ");
    
            /* -------- Eingabe */
            fgets(eingabe, sizeof(eingabe), stdin);
            eingabeBuchstabe = eingabe[0];
    
            if (eingabeBuchstabe >= 'a') 
                {
                    eingabeBuchstabe -= 32;
                }
            if (eingabeBuchstabe < 'A' || eingabeBuchstabe >'Z')
            {
                printf("Ungueltige Eingabe!\n");
                continue;
            }
    
            /* -------- Buchstaben mit Aufgabe vergleichen */
            for (int i = 0; i < laenge; i++)
            {
                if (raetselWort[i] == '_' && gesuchtesWort[i] == eingabeBuchstabe) 
                 {
                     raetselWort[i] = gesuchtesWort[i]; /* Unterstrich durch Eingabe ersetzen */
                     printf("\tRichtig!\n");
                     anzahlGesucht--;
                     anzahlGefunden++;
                     break;
                 }
                else
                {
                    anzahlFehler++;            
                    if (anzahlFehler >= 10)
                    {
                        printf("\nDu wurdest gehaengt!\n");
                    }
                }
            }
    
        }
    
        return 0;
    }
    


  • Acsxak schrieb:

    Kann mir jemand den folgenden Code berichtigen? Ich sitze jetzt schon ewig davor und es kommt nur "Run Command: line 1: 2235 Abort trap: 6 ./"2""2" "{@:3}"". Ich sehe den (oder die) Fehler einfach nicht, weshalb ich auch kein Minimalbeispiel geben kann.

    Was ist denn das für ein Argument? Wenn du den Fehler sehen würdest, müsstest du überhaupt nicht fragen. Ein Minimalbeispiel konstruierst du, indem du schrittweise Programmteile entfernst und guckst, ob der Fehler noch besteht.

    Fehler:

    char gesuchtesWort[] = "";  // Array hat die Länge 1
    // ...
                strcpy(gesuchtesWort, "maus"); // ... du kopierst 5 Zeichen rein
    

    Vielleicht sind noch mehr Fehler drin, keine Lust zum Suchen.



  • Du hast sowohl logische Fehler wie auch reichlich Implementierungsfehler in deinem Programm, break bei switch vergessen, dein uppercase/lowercase ist auch ziemlich überflüssig:

    int main(int argc, char *argv[])
    {
    
    	/* -------- Zufallszahlen */
    	srand(time(NULL));
    	int aufgabeAuswahl = rand() % 4;
    
    	/* -------- Aufgaben */
    	char gesuchtesWort[100];
    	char raetselWort[100];
    
    	/* -------- Zufaellige Auswahl einer Aufgabe */
    	switch (aufgabeAuswahl) {
    	case 0:
    		strcpy(gesuchtesWort, "maus");
    		strcpy(raetselWort, "____"); break;
    	case 1:
    		strcpy(gesuchtesWort, "tastatur");
    		strcpy(raetselWort, "_______"); break;
    	case 2:
    		strcpy(gesuchtesWort, "flachbettscanner");
    		strcpy(raetselWort, "________________"); break;
    	case 3:
    		strcpy(gesuchtesWort, "monitor");
    		strcpy(raetselWort, "_______"); break;
    	}
    
    	/* -------- Zaehler */
    	int anzahlFehler = 0;
    	int laenge = strlen(gesuchtesWort);
    	int anzahlGesucht = laenge;
    	int anzahlGefunden = 0;
    
    	/* -------- Eingabe */
    	char eingabeBuchstabe;
    
    	printf("\n\n\tG A L G E N R A T E N\n");
    
    	while (anzahlGesucht > 0) {
    		int gefunden = 0;
    		printf("\n%s\n", raetselWort);
    		printf("Anzahl Fehler: %i\n", anzahlFehler);
    		printf("Einen Buchstaben eingeben: ");
    
    		/* -------- Eingabe */
    		eingabeBuchstabe = getchar(); while (!feof(stdin) && !ferror(stdin) && getchar() != '\n');
    
    		/* -------- Buchstaben mit Aufgabe vergleichen */
    		for (int i = 0; i < laenge; i++)
    		{
    			if (raetselWort[i] == '_' && gesuchtesWort[i] == tolower(eingabeBuchstabe))
    			{
    				raetselWort[i] = gesuchtesWort[i]; /* Unterstrich durch Eingabe ersetzen */
    				printf("\tRichtig!\n");
    				anzahlGesucht--;
    				anzahlGefunden++;		
    				gefunden++;
    			}
    		}
    
    		if (anzahlGesucht == 0) puts("Loesung:"), puts(raetselWort);
    		if (gefunden) continue;		
    
    		if (++anzahlFehler >= 10)
    		{
    			printf("\nDu wurdest gehaengt!\n"); break;
    		}
    
    	}
    
    	return 0;
    }
    

    http://ideone.com/M2CqYR



  • Run Command: line 1: 2235 Abort trap: 6 ./"2""2" "{@:3}"".

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "time.h"
    

    ...sicher das das so stimmt? <stdio.h>....



  • veryunsure schrieb:

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "time.h"
    

    ...sicher das das so stimmt? <stdio.h>....

    Der Unterschied zwischen "" und <> ist der Suchpfad für die Include-Dateien.
    Bei "" wird erst im Verzeichnis der gerade compilierten .c-Datei gesucht.
    Danach verhält es sich wie bei <>, wo in den Includepfaden vom System/Compiler nach den Dateien gesucht wird.

    Also sollte es auch mit "" funktionieren. Es sei denn es existieren eigen Includedateien mit den Namen.

    Fehlermeldungen vom Compiler sehen auch anders aus.


Anmelden zum Antworten