statement Übung, bin verwirrt.

08/01/2016 00:56 elemeNt_123#1
Hallo,

ich habe mir ein Guide zu den ganzen Keywörtern wie : If, do, for usw. angeschaut und auch ein Beispiel abgeschrieben. Jedoch wollte ich das Beispiel etwas erweitern, damit ich noch etwas mehr lerne. Ich poste erstmal den Code und sage dann, wo der Haken ist.

Code:
#include <iostream>
#include <windows.h>

using namespace std;

void hochfahren()
{
    do {
        int x++;

    }
        while (x !=10);
}
int main()
{
 char buchstabe;
 int x;
 cout << "Fahrstuhl Countdown !";
  for (x = 10; x > 0; x--){
        cout << x << ", ";

    }
    cout << "Ende" << endl << endl;
    cout << "Wollen Sie wieder nach oben ?" << endl << "Antworte mit y/n ";
    cin >> buchstabe;
    if (buchstabe == 'y')
    {
     hochfahren();
     cout << x;
    }
    else if (buchstabe == 'n') cout << "danke" << endl;

    system("PAUSE");
    return 0;
}
Beim Fahrstuhl Countdown, wo es von 10 bis 1 geht, läuft alles wunderbar (sollte es auch, da ich es abgeschrieben hab :D ). Das mit dem Hochfahren hab ich hinzugefügt und zurzeit wird mir ein Syntax Error bei der Void Funktion angezeigt.

Jedoch bin ich mir auch nicht mal sicher, ob das Programm überhaupt richtig laufen würde, wenn ich den Syntax Fehler behebe. Ich hab mir das so gedacht :
Falls man "y" eintippt, so soll zur Funktion hochfahren gewechselt werden. In dieser Funktion soll mit "do" x erhöht werden, solang x noch nicht 10 ist.

edit : Zum Syntax error

Mit initializer wird doch so was wie int gemeint, oder nicht ? Gerade weil ich int vor x geschrieben habe, bin ich etwas verwirrt. ^^
08/01/2016 06:22 BladeTiger12#2
Deine Funktion müsste so aussehen:

Code:
void hochfahren()
{
    int x = 0;
    do {
        x++;
    } while(x != 10);
}
In dem Moment, indem du diese Variable hochzählen willst, wird sie erst erstellt, und da erwartet der Compiler eine Initialisierung, deswegen der Fehler.
08/01/2016 11:43 th0rex#3
Quote:
Originally Posted by BladeTiger12 View Post
Deine Funktion müsste so aussehen:

Code:
void hochfahren()
{
    int x = 0;
    do {
        x++;
    } while(x != 10);
}
In dem Moment, indem du diese Variable hochzählen willst, wird sie erst erstellt, und da erwartet der Compiler eine Initialisierung, deswegen der Fehler.
Das was du da tust könnte aber eher unerwartet sein. Du hast damit 2 unterschiedliche Variablen x. Es wird in dem Fall zwar das gleiche ausgegeben, aber falls z.B. der Fahrstuhl auf Ebene 3 angehalten werden soll, tut der Code nichtmehr das richtige.

Die richtige Version wäre entweder eine globale Variable x zu erstellen, oder der Funktion hochfahren x als Referenz zu übergeben.

Code:
int x = 10;

void hochfahren(){x++; /*...*/}

void main(){x-- /*...*/}
Wenn du so auf x zugreifst, greifen beide Funktionen auf das gleiche x zu. Da globale Variablen manchmal als unschön angesehen werden könntest du x auch als Referenz übergeben:

Code:
void hochfahren(int& x){x++;}

void main(){
    int x = 10;
    hochfahren(x);
}
Dadurch ist x nicht lokal, aber hochfahren kann das x aus main trotzdem noch ändern. Pointer würde genauso gut gehen, ist aber als schlechter Stil angesehen (da du theoretisch nen nullptr übergeben könntest und dann in hochfahren darauf prüfen müsstest).
08/01/2016 15:20 elemeNt_123#4
Hat mit einer globalen Variable geklappt, danke !
08/01/2016 18:22 th0rex#5
Quote:
Originally Posted by .Scy View Post
globale variablen kannst du hier auch ganz einfach umgehen, was man immer tun sollte.

anstelle von
Code:
void hochfahren()
sollte die funktion so aussehen:
Code:
int hochfahren(int x){
return ++x;
}
das gleiche halt mit -- fürs herunterfahren.
Für nen einzeiler brauche ich keine Funktion lol. Und wenn er halt keine globalen Variablen will, dann Referenzen wie ich ja schon geschrieben habe.
08/01/2016 22:00 C_O_R_E#6
Da du dich noch neu mit der Programmiersprache befasst, reicht es erstmal zu wissen, dass das mit der Globalen Variablen Deklaration funktioniert hat.Im weiteren Laufe wirst du neue "Tools" (genauer Sprachelemente) kennen lernen mit denen du effizientere Lösungswege findest. Eine dieser Lösungswege wäre die Übergabe über die Referenz (Call by reference). Mach dir also keinen Stress, wenn du erstmal keine Kenntnis über Referenzen hast, dass wird im Laufe des Lernens noch begegnen.