Prozedur gibt nichts aus



  • Hallo liebe C++ Gemeinde,

    Ersteinmal möchte ich mich entschuldigen, falls so eine Frage schonmal aufgetaucht ist, und hier Antworten wiederholt werden. Ich habe die SuFu benutzt, aber wusste eigentlich nicht genau, wonach ich eigentlich suchen soll, da ich keine Ahnung habe, was überhaupt der Fehler ist.

    Zu meinem Problem:
    Ich habe 3 verschiedene Prozeduren, 2 davon stellen aus verschiedenen Wörtern zufällig Sätze zusammen. Die dritte Prozedur vergleicht ein vom Benutzer eingegebenes Ergebnis mit dem vom Compiler errechneten Ergebnis, und greift dabei auf die 2 vorher genannten Prozeduren zu, um bei einer richtigen bzw falschen Antwort witzige Kommentare abzugeben. Ich hoffe das habe ich jetzt nicht zu verzwickt erklärt 😉 .
    Mein Kenntnisstand von C ist übrigens nicht sehr gut; ich kann grundlegende Sachen machen, aber mit Structs und Pointern bin ich meistens überfordert (noch), und muss stundenlang auf den Bildschirm starren, bis ich es verstehe oder mir etwas einfällt.

    Hier der Code:

    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    #include <time.h>
    
    //Prototypen
    int Würfel(int i);
    void Treffer_proc();
    void Getroffen_proc();
    void Vergleicher_proc(int i, int j, int k);
    
    int _tmain(int argc, _TCHAR* argv[])
    {    
    		int i = 3; int j = 99; int k = 99; int iErgebnis, iEingabe;
    		switch (Würfel(3)){																					// Leichtgewichtsklasse
    
    		case 1:		//Addieren
    			j = Würfel(j); k = Würfel(Würfel(k));
    			printf("Addieren Sie folgende Zahlen:\n\t%d\tund\t%d\n\nErgebnis:\t", j, k);
    			scanf_s("%d", &iEingabe); fflush(stdin);
    			iErgebnis = j + k;
    			Vergleicher_proc(iEingabe, iErgebnis, iErgebnis);
    			break;
    
    		case 2:		//Subtrahieren
    			j = Würfel(j); k = Würfel(Würfel(k));
    			printf("Subtrahieren Sie folgende Zahlen:\n\t%d\tund\t%d\n\nErgebnis:\t", j, k);
    			scanf_s("%d", &iEingabe); fflush(stdin);
    			iErgebnis = j - k;
    			Vergleicher_proc(iEingabe, iErgebnis, iErgebnis);
    			break;
    
    		case 3:		//Multiplizieren 
    			j = Würfel(j - 90); k = Würfel(Würfel(k - 90));
    			printf("Multiplizieren Sie folgende Zahlen:\n\t%d\tund\t%d\n\nErgebnis:\t", j, k);
    			scanf_s("%d", &iEingabe); fflush(stdin);
    			iErgebnis = j * k;
    			Vergleicher_proc(iEingabe, iErgebnis, iErgebnis);
    			break;
    
    		case 4:		//Dividieren 
    			j = Würfel(j - 80); k = Würfel(Würfel(k - 90));
    			iErgebnis = j * k;
    			printf("Dividieren Sie folgende Zahlen:\n\t%d\tund\t%d\n\nErgebnis:\t", iErgebnis, k);
    			scanf_s("%d", &iEingabe); fflush(stdin);
    			Vergleicher_proc(iEingabe, j, j);
    			break;
    		}
    	}
    
    	getchar();
    	return 0;
    }
    
    // Funktionskörper-----------------------------------------------------------------
    
    int Würfel(int i)
    {
    	srand(time(NULL));
    	int j = rand() % i + 1;
    	return j;
    }
    
    void Treffer_proc()		// Antwortkatalog wenn man die Frage richtig beantwortet und Schläge austeilt.
    {
    	printf("\nEin");
    	switch (Würfel(6)){
    	case 1:
    		printf(" Leberhaken");
    		break;
    	case 2:
    		printf(" Haken");
    		break;
    	case 3:
    		printf(" stylisher Uppercut");
    		break;
    	case 4:
    		printf("e harte linke Gerade");
    		break;
    	case 5:
    		printf("e kraeftige rechte Gerade");
    		break;
    	case 6:
    		printf("e toedliche Kombination");
    		break;
    	}
    	switch (Würfel(2)){
    	case 1:
    		printf(" trifft");
    		break;
    	case 2:
    		printf(" erwischt");
    		break;
    	}
    	switch (Würfel(4)){
    	case 1:
    		printf(" direkt");
    		break;
    	case 2:
    		printf(" gekonnt");
    		break;
    	case 3:
    		printf(" krachend");
    		break;
    	case 4:
    		printf(" geraeuschvoll");
    		break;
    	}
    	switch (Würfel(5)){
    	case 1:
    		printf(" das Kinn");
    		break;
    	case 2:
    		printf(" die Nase");
    		break;
    	case 3:
    		printf(" die Leber");
    		break;
    	case 4:
    		printf(" das Auge");
    		break;
    	case 5:
    		printf(" die Schlaefe");
    		break;
    	}
    	printf(" Ihres Gegners.");
    }
    
    void Getroffen_proc() // Antwortkatalog wenn man die Frage falsch beantwortet und Schläge kassiert.
    {
    	switch (Würfel(5)){
    	case 1:
    		printf("\nLeider falsch. ");
    		break;
    	case 2:
    		printf("\nZu langsam. ");
    		break;
    	case 3:
    		printf("\nStrengen Sie sich mehr an! ");
    		break;
    	case 4:
    		printf("\nNicht aufgeben! ");
    		break;
    	case 5:
    		printf("\nEin Cut, Sie bluten. ");
    		break;
    	}
    	printf("Ihr Gegner kontert, und haut sie ");
    	switch (Würfel(4)){
    		case 1:
    			printf("schmerzhaft");
    			break;
    		case 2:
    			printf("voll");
    			break;
    		case 3:
    			printf("mit voller Wucht");
    			break;
    		case 4:
    			printf("unausweichlich");
    			break;
    	}
    	switch (Würfel(4)){
    	case 1:
    		printf(" ins Gesicht.");
    		break;
    	case 2:
    		printf(" auf die 12.");
    		break;
    	case 3:
    		printf(" auf ihre ungedeckte Seite.");
    		break;
    	case 4:
    		printf(" auf die Nase.");
    		break;
    	}
    }
    
    void Vergleicher_proc(int i, int j, int k)			// Ergebnisvergleicher
    {
    	if (i == j)
    	{
    		Treffer_proc;
    	}
    	else
    	{
    		Getroffen_proc;
    		printf("\nDas korrekte Ergebnis lautet %d", k);
    	}
    }
    

    Starten lässt es sich, aber es sieht so aus, als ob mein "Vergleicher" nichts macht. Ich verstehe nicht wieso.

    Bitte um Hilfe!! Und vielen Dank schonmal!!



  • In Deiner Vergleicher_proc fehlen die () hinter den Funktionsaufrufen.



  • Oh Gott, du hast Recht. Vielen Dank!! Vielleicht sollte ich mal an die Luft gehen, peinlich.

    Danke Belli 👍



  • Nochwas:

    srand ruft man nur einmal im gesammten Programm auf.
    Am besten am Anfang der main()

    Der Doppelte Aufruf von Würfel macht den Zufall nicht zufälliger.

    Umlaute in Bezeichnern sind (eigentlich) nicht erlaubt.

    // Texte am Anfang definieren
    const char* Stelle[] = {" das Kinn", " die Nase", " die Leber", " das Auge"," die Schlaefe"};
    ...
    // Zeile 111 bis 127 sind dann nur noch ein Einzeiler:
    printf("%s", Stelle{Wuerfel(5-1); // Das -1 muss sein, da Wuerfel erst ab 1 beginnt
    


  • Kleine Korrektur:
    [code"=c"]
    printf("%s", Stelle[Wuerfel(5)-1]);
    [/code]
    😋

    @DirkB: oder wolltest du den TO testen?



  • H@ns2014 schrieb:

    Oh Gott, du hast Recht. Vielen Dank!! Vielleicht sollte ich mal an die Luft gehen, peinlich.

    Danke Belli 👍

    Zuviel Pascal programmiert?


Anmelden zum Antworten