Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.03.2016, 19:39

Problem bei Listing 4.9

Huhu, und wiedermal ein neuer im Forum :D

Hallo liebe Spieleprogrammierer.de Community,
ich bin zurzeit bei listing 4.9 und habe mein Programm auch schon geschrieben.
Nur komischer Weise rechnet mir das Programm die Werte nicht aus.
Außerdem, wenn ich die Zahl 2 eingebe, sagt mit das Programm, dass ich entweder 1 oder 2 benutzen soll ?(
In Visual Studio habe ich keine Fehler und ich kann das Programm ohne Probleme debuggen.
Hier der Quellcode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>

using namespace std;

void addPunkte(int Startwert, int Prozentsatz);
void addPunkte(float fStartwert, float fProzentsatz);

int sWert;
float gWert;

int Attribut;
int Prozentsatz = 2;

int main() {
    

    cout << "Entscheide dich!" << endl; 
    cout << "Welches der Attribute möchtest du skillen?" << endl;
    cout << "Wähle '1' für Stärke und '2' für Geschwindigkeit!" << endl;
    cin >> Attribut;

    if (Attribut == 1) {

        void addPunkte();
        cout << "Gute Wahl! Deine Stärke entspricht nun " << sWert << endl;


        if (Attribut == 2) {

            void addPoints();
            cout << "Gute Wahl! Deine Geschwindigkeit entspricht nun " << gWert << endl;

        }
    }
    else if (Attribut != 1,2){
        cout << "Benutze '1' oder '2' !" << endl;




    }



    return system("PAUSE");
}

void addPunkte(int Startwert, int Prozentsatz) {
     
     int sWert;
     Startwert = 1;
 
     sWert = Startwert * Prozentsatz;

}

void addPunkte(float fStartwert, int Prozentsatz) {

     int gWert;
     fStartwert = 0.1f;

     gWert = fStartwert * Prozentsatz;

}


Ich hoffe ihr könnt mir helfen.
Mfg FantaSy

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

2

28.03.2016, 20:10

Verwende mal den Debugger, dann siehst du schnell wo dein Problem liegt.
Bei der Eingabe "2" wird zuerst geprüft ob Attribut == 1, die 2te Prüfung ob Attribut == 2 wird nie erreicht, da diese innerhalb des ersten If liegt.

3

28.03.2016, 20:21

Verwende mal den Debugger, dann siehst du schnell wo dein Problem liegt.
Bei der Eingabe "2" wird zuerst geprüft ob Attribut == 1, die 2te Prüfung ob Attribut == 2 wird nie erreicht, da diese innerhalb des ersten If liegt.


Danke, habe einfach die eine geschweifte Klammer nach oben verlegt und jetzt passt das.
Aber das mit dem Rechnen klappt immernoch nicht.

Mfg FantaSy

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

4

28.03.2016, 20:26

Wenn du deine add-Methoden schon überlädst, dann solltest du auch die Werte entsprechend übergeben.
Parameterübergabe

5

28.03.2016, 20:34

Außerdem werden Swert und gWert nicht initialisiert und Zeile 35 macht nicht das, was du dir vorstellst, Stichwort Kommaoperator (war das Ding jemals zu was zu gebrauchen?!).

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

6

28.03.2016, 20:35

Außerdem werden Swert und gWert nicht initialisiert.

Zeile 53 und 62 ;)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

28.03.2016, 20:37

Da gehen aber einige Dinge schief. Du rufst deine Funktionen ohne Parameter auf. Die Funktion addPunkte() ohne Parameter ist in deinem Code aber gar nicht definiert. Wenn das alles vom Code ist dürfte das so nicht ausführbar sein.Außerdem solltest du dir noch mal ansehen wie Funktionen Werte zurück geben. Deine Funktionen berechnen zwar ein Ergebnis, das verfällt aber nachdem die Funktion beendet wird. Du gibst es nie an den Aufrufer zurück. Möglicherweise bist du das Buch bis jetzt etwas zu oberflächlich durchgegangen oder hast du wenig mit eigenen Codes experimentiert. Geh vielleicht zumindest das Kapitel noch mal durch. Und probier neu gelerntes ruhig direkt aus. Du musst dafür nicht auf die Aufgaben warten. Je mehr du selbst machst desto besser.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

28.03.2016, 20:40

Tatsächlich.
Aber wie schon gesagt, dort werden nur die beiden lokalen Variablen beschrieben, die globalen werden 'verdeckt'.
Dass globale Variablen meist zu meiden sind wirst du auch bald noch mitbekommen.

9

28.03.2016, 20:40

Okay danke euch allen, hab das Problem erkannt (nach dem ich die letzten seiten nochmal durchgeblättert habe)
ich brauchte nur aus den Void's nur floats und ints machen dann gings auch schon.
Mfg FantaSy

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

10

28.03.2016, 20:45

Jetzt sehe ich es erst, Zeile 24 und 30 sind gar keine Methodenaufrufe, daher wirft VS auch keinen Fehler.

Werbeanzeige