Variable in Variable ?!



  • Ich habe folgendes Problem, dessen Lösung ich nicht direkt bei euch (oder bei Google) finden konnte.

    Ich habe in etwa folgendes vor.

    Ich speichere vorab ein paar Zahlen auf einer Variable.

    int a1, a2, a3, Zahl;

    a1 = 12;
    a2 = 14;
    a3 = 16;

    Als nächstes möchte ich den User etwas auswählen lassem.

    cout << "Wähle eine Zahl zwischen 1 und 3";
    cin >> Zahl;

    Jetzt möchte ich -OHNE IF ABFRAGE oder ähnliches- das er mir die Zahl ausgibt.

    cout << a"und hier die vom User eingegebene Zahl";

    Quasie das am Ende da steht:

    cout << a1; //oder a2 oder a3.

    Gibt es vielleicht eine Alternative dazu? Denn SO geht das ja nicht ^^.

    Danke!!!!!!



  • Hallo

    Das geht nur wenn du statt 3 Variablen ein Array benutzt.
    C/C++ kennt zur Laufzeit keine Variablennamen, nur Speicheradressen.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • switch(Zahl) {
    case 1:
    cout<<a1;
    break;
    case 2: 
    cout<<a2;
    break;
    case 3: 
    cout<<a3;
    break;
    }
    

    oder

    for (;;Zahl==1) {
    cout<<a1;
    break;
    }
    for (;;Zahl==2) {
    cout<<a2;
    break;
    }
    for (;;Zahl==3) {
    cout<<a3;
    break;
    }
    

    Den Blödsinn kann man auch noch mit while machen. Sinn? Keiner, natürlich.



  • Richters schrieb:

    Jetzt möchte ich -OHNE IF ABFRAGE oder ähnliches- das er mir die Zahl ausgibt.

    Ähnliches ist switch, for, while.
    Edit: Dein for ist übrigens falsch.


  • Mod

    cout << 2*zahl + 10;
    


  • SeppJ schrieb:

    cout << 2*zahl + 10;
    

    +1 😃



  • Danke kleiner Troll .. aber ich habe extra gesagt ohne irgendeine abfrage^^ .. das kann ich auch..

    Ich zeige es mal an einem konkreten Beispiel.

    Ich hab vor ein Kampfsystem zu basteln. Verschiedene Attacken mit verschiedener Angriffskraft (dmg) und verschieden hoher verbrauch von Mana (mp). Und die bereite ich so vor:

    struct attack
    {
    int dmg;
    int mp;
    };
    attack a1, a2;

    a1.dmg = 80; a1.mp = 50;

    a2.dmg = 60; a2.mp = 35;
    Beispiel ende.

    Dann soll mein Kampfsystem so verallgemeinert werden das ich mit der eingabe des Users (Zahl der gewählten Attacke zB. 1, 2 oder 3) dann die Attacke auswählen kann und die werte in das folgende System einfügen kann.

    treffer = random(100);
    if(player == 1)
    {
    cout << "Spieler ist dran!\n";
    cout << "Gegner: " << p2.hp << " HP." << endl;
    cout << "Ich: " << p1.hp << " HP." << endl << "waehle attake (1/2)";
    cin >> atk;
    cout << "Spieler wählt Attake " << atk << " aus!\n";
    Sleep(1000);system("CLS");
    if(treffer < 80)
    {
    if(treffer > 70) {x = 2; cout << "KRITT\n\n";} else x = 1;
    if(atk == 1)
    {
    dmg = ( x *(80 + random(5)));
    cout << dmg << " dmg." << endl;
    p2.hp = p2.hp - dmg;
    p1.mp - 50;
    }
    }else cout << "Attake " << atk << " ging daneben!\n";
    }

    Beispiel ende.

    Und würde ich jetzt für jede Attacke sowas machen müssen, wäre es ja doch schon ein riesiger Block. Und es sollen ja schon einige Attacken werden^^

    Danke nochmal.



  • struct attack
    {
    int dmg;
    int mp;
    };
    attack a[2];
    
    a[0].dmg = 80; a[0].mp = 50;
    
    a[1].dmg = 60; a[1].mp = 35;
    
    ...
    
    int atackno;
    std::cin >> atackno;
    attack aa = a[attackno];
    

    Array eben.



  • akari schrieb:

    Hallo

    Das geht nur wenn du statt 3 Variablen ein Array benutzt.



  • Ich habe das mit dem Array nicht direkt nachvollziehen können^^ .. danke 🙂



  • Wenn dein Compiler C++11 kann, nimm std::array statt Arrays. Die sind in sämtlichen Punkten überlegen, oder mindestens gleich gut.



  • @Nathan
    Stimmt, war falsch. Aber war auch eher just4fun, die Antwort wurde ja schon von akari gegeben.



  • int a1, a2, a3;
    
    int main()
    {
      a1 = 12;
      a2 = 14;
      a3 = 16;
    
      int Zahl;
      cout << "Wähle eine Zahl zwischen 1 und 3";
      cin >> Zahl; 
      cout << " => " << *(&a1 + Zahl - 1) << '\n';
    }
    


  • cout << " => " << *(& a3 + Zahl - 1) << '\n';



  • Scherzkekse.

    Anmerkung zur echten Lösung:

    int attackno;
    std::cin >> attackno;
    attack aa = a[attackno];
    

    ...wenn ich jetzt 2500 eingebe, hast du damit ein echtes Problem. Du solltest zumindest prüfen, dass 0 <= attackno < Anzahl Angriffe ist.


Anmelden zum Antworten