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

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

12.04.2013, 19:15

Variale für alle Funktionen

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//ein Quiz
#include <iostream>
using namespace std;
#include <windows.h>

int evaluation(int x);
int accelaration(int total);
int wronganswer(void);



int rightanswer(int total)
{
    total++;
    cout << "Next question: ";
    Sleep(3000);
    system("cls");
    return (total);
}

int wronganswer(void)
{
    cout << "Next question: ";
    Sleep(3000);
    system("cls");
    return 0;
}

int evaluation(int total)
{
    cout << "Here is your evaluation:\n\n";
    if (total >= 9)
    {
        cout << "You are an expert! (Or a very lucky person)";
        Sleep(5000);
        return 0;
    }
    else
    {
        if (total >= 7)
        {
            cout << "A good performance!";
            Sleep(5000);
            return 0;
        }
        else
        {
            if (total >= 4)
            {
                cout << "You aren't bad at all!";
                Sleep(5000);
                return 0;
            }
            else
            {
                cout << "I guess you aren't very clever...";
                Sleep(5000);
                return 0;
            }
        }
    }
}



int main()
{
    int total; int choice; int choice1;
    cout << "You will have to find the right answers to the following questions\n"; 
    cout << "Do you want to start the game?\n";
    cout << "Press 1 to start the game or something else to exit";
    
    cin >> choice;
    if (choice == 1)
    {
        system("cls");
        cout << "Choose the right answers (Do not use a calculator)";
        Sleep(3000);
        system("cls");
    }
    else
    {
        system("cls");
        cout << "Quitting game...";
        Sleep(3000);
        return 0;
    }

    //Quiz is starting

    cout << "The river Jordan flows out into the...";   //First question
    cout << "1) Pazific ocean\n2) Dead sea\n3) Mediterranean sea";
    cin >> choice1;
    if (choice1 == 2)
    {
        int rightanswer(int total);
    }
    else
    {
        int wronganswer(void);
    }
    int evaluation(total);
    return 0;
}


Ich bekomme bei diesem Quiz ( bei dem natürlich noch 9 weitere Fragen fehlen) einen Runtime-Fehler, weil total nicht initialisiert ist, mir ist auch klar, wieso...
Nur wie bekomme, ich es hin, dass total (steht übrigens für die Gesamtpunktzahl) als Variable für alle Funktionen gilt, gleichzeitig aber auch von der Nebenfünktion rightanswer(total) verändert werden kann??

Ich bin übrigens noch Anfänger, bitte am besten mit einem neuen (richtigen) Code antworten :) Und versucht es für einen Anfänger verständlich zu machen :D

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

2

12.04.2013, 19:19

Das geht entweder über globale Variablen oder über Referenzen. Ich würde dir zu letzterem raten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

12.04.2013, 19:23

Zeile 96, 100 und 102 solltest Du Dir mal ansehen. Und wenn total nicht initialisiert ist, wäre es wohl gut, wenn Du es initialisierst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

4

12.04.2013, 20:10



Das geht entweder über globale Variablen oder über Referenzen. Ich würde dir zu letzterem raten.
Wie würde das denn aussehen? Und globale Variablen kann man (meiner winzigen Erfahrung nach) nicht komplett verändern, nur in der jeweiligen Funktion...

Zeile 96, 100 und 102 solltest Du Dir mal ansehen. Und wenn total nicht initialisiert ist, wäre es wohl gut, wenn Du es initialisierst.

Und wenn total nicht initialisiert ist, wäre es wohl gut, wenn Du es initialisierst.
Das war ja das Hauptproblem, wie initiiere ich total für alle Funktionen?? Sodass ich die Variable von jeder Funktion aus ändern kann? Oder muss ich das ganze Programm umdenken? :huh:

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

12.04.2013, 20:19

Man kann eine Variable nur initialisieren. Das hat aber erst mal nichts damit zu tun wo sie in deinem Programm zugreifbar ist. Das sind so grundlegende Dinge, da solltest du dir einfach ein gutes Einsteigerbuch kaufen. Alles andere bringt nichts. Wenn du das schon besitzt, dann guck doch mal ob da etwas zum Unterschied von globalen und lokalen Variablen drin steht. Referenzen wurden ja auch angesprochen. Das Kapitel solltest du dann möglicherweise auch noch mal wiederholen:)
„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.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

12.04.2013, 20:28

Wie würde das denn aussehen?
Wie eine globale Variable eben. Der Name ist Programm.

Und globale Variablen kann man (meiner winzigen Erfahrung nach) nicht komplett verändern, nur in der jeweiligen Funktion...
Nein. Das sind lokale Variablen. Dein Wissen bedarf Nachhilfe.

Das war ja das Hauptproblem, wie initiiere ich total für alle Funktionen??
Mit dem Zuweisungsoperator.

Sodass ich die Variable von jeder Funktion aus ändern kann? Oder muss ich das ganze Programm umdenken? :huh:
Änderung der Variable aus jeder Funktion heraus bedarf einer globalen Variable oder einer Referenz.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

7

12.04.2013, 20:31

Änderung der Variable aus jeder Funktion heraus bedarf einer globalen Variable oder einer Referenz
Naja, zumindest habe ich jetzt einen Anhaltspunkt, nach dem ich suchen kann. Danke allen und tut mir leid, dass ich das ganze kaum verstehe :D

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

8

12.04.2013, 21:48

@SwatzZ:
Ich werde dir deine Frage nicht beantworten, weil meiner Meinung nach diese Frage Unsinn ist.

Du denkst in einer falschen Struktur, ich wuerde dir raten das zu aendern. Du willst eine Variable fuer alle Funktionen, obwohl du die Variable nur an einer Stelle brauchst. Wenn ich deine Programmstrutur moeglichst wenig aendern soll, wuerde ich vorschlagen, das deine Antwortfunktionen die Anzahl Punkte zurueckgibt, welche man erhaelt. In rightanswer also Beispielsweise return 1; fuer 1 Punkt pro korrekte Antwort. Deine Punktzahl berechnest du dann in dem du den Rueckgabewert immer addierst, etwa so:

C-/C++-Quelltext

1
    total += rightanswer();

Es ist dann unnoetig, globale Variablen zu benutzen. Die Gesamtpunktzahl ist fuer fuer rightanswer ohnehin unwichtig.

Allgemein solltest du aber dein Programm insgesamt aendern, damit du ein flexibleres Quiz machen kannst. Lege zunaechst eine Struktur "Antwort" an. Diese besteht aus einem Text und einer Punktzahl. Hierher kommen spaeter Daten wie z.b. "Pazific ocean";0 oder "Dead sea";1. Lege dann eine Struktur "Frage" an, in der ein Fragetext und ein Array Antworten gepeichert wird. Nun kannst du ein Array von Fragen anlegen, die dein gesamtes Quiz definieren. Der Ablauf des Quiz ist dann schematisch nur noch

Quellcode

1
2
3
4
5
6
7
8
9
10
fuer Alle Fragen
{
    Gib Fragetext aus
    fuer alle Antworten
    {
        Gib Antworttext aus
    }
    User waehlt Antwort
    total erhoehen um Punktwert der gewaehlten Antwort
}

9

13.04.2013, 23:19

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
if (choice1 == 2)
{
int rightanswer(int total);
}
else
{
int wronganswer(void);
}
int evaluation(total);
return 0;
}

Hö? Was machst du den da? Bin ich zu blöd um das zu verstehen? Nachdem du eine if abfrage gemacht hast deklarierst du Funktionen?
Oder hab ich da was verpasst?

Werbeanzeige