Variablen auch außerhalb von if und else



  • antstatt mehrere arrays zu schreiben nimm doch einfach eins.. z.B:

    char Test[4][2];
    
    Test[1][1]='Eingabe';
    Test[2][1]='Status';
    Test[3][1]='BlaBlaBla';
    Test[1][2]='10';//Wert von Eingabe
    Test[2][2]='20';//Wert von Status
    Test[3][2]='30';//Wert von BlaBlaBla
    Test[4][2]='\0';
    


  • Das klingt ja alles sehr gut, aber nutzen tut es mir nichts, oder ich verstehe es falsch. zeige euch mal die ganze Funktion, vielleicht wird mein Problem dann deutlicher. Ihe seht ja das Transfer eine Variable übergeben bekommt, die entschiedet darüber was zugewiesen werden soll.

    [cpp]
    //Methode die den eigentlich Transfer ausführt
    void Bankautomat::Transfer(char auswahl) {
    	bool wahl = false;
    
    	do {
    		if(auswahl == 'e') {
    			char ausgabe[] = "Einzahlung"; //Erscheint in der Überschrift
    			char ausgabeText[] = " einzahlen"; //erscheint bei gewünschtem Betrag
    			char ausgabeFunktion[] = " wird auf Ihr Konto gebucht!"; //Erscheint in der Statusmeldung
    		}
    		else if(auswahl == 'a') {
    			char ausgabe[] = "Auszahlung";
    			char ausgabeText[] = " abheben";
    			char ausgabeFunktion[] = " wird von Ihrem Konto abgebucht!";
    		}
    
    		//Variable in der, der Einzahlungsbetrag gespeichert wird
    		int zahlung;
    
    		cout << endl << endl;
    		cout << "\t" << ausgabe << endl;
    		cout << "\t-----------" << endl;
    		cout << endl << endl;
    		cout << "\tWelchen Betrag moechten Sie " << ausgabeText << " ? " << endl << endl;
    		cout << "\t-------------------" << endl;
    		cout << "\tIhr Betrag: ";
    		cin >> zahlung;
    		cout << "\t-------------------" << endl << endl;
    
    		//Hier wird der Betrag auf Bedingungen getestet
    		if(zahlung < GetminEinzahlung()) {
    			cout << "\tDer Betrag muss mindestens " << GetminEinzahlung() << " EUR betragen! " << endl;
    			system("cls");
    		}
    		else if (zahlung > GetmaxEinzahlung()) {
    			cout << "\tDer Betrag darf nicht mehr als " << GetmaxEinzahlung() << " EUR sein! " << endl;
    			system("cls");
    		}
    		else {
    			cout << "\tDer Betrag von " << zahlung << " EUR " << ausgabeFunktion << endl << endl;
    			cout << "\tBitte haben Sie einen Moment gedult";
    			Warten();
    			cout << endl << endl;
    			cout << "\tIhr Auftrag wurde erfolgreich ausgefuehrt" << endl << endl;
    
    			//Neuer Kontostand wird ausgegeben
    			cout << "\t--------------------------------" << endl;
    			cout << "\tAktueller Kontostand: " << GetKontostand(zahlung) << " EUR" << endl;
    			cout << "\t--------------------------------" << endl;
    
    			cout << endl << endl << endl;
    			cout << "\tGeben Sie 'z' ein um zurueck zu kehren.";
    
    			//Eingabe wird abgewartet, wenn erfolgt getestet
    			switch(getch()) {
    				case 'z':  system("cls");
    						   wahl = true;
    						   break;
    
    				default:   Fehlermeldung();
    					       break;
    			}
    		}
    	}
    	while(!wahl);
    }
    [/cpp]
    

    Nun seht ihr warum ich den Variablen verschiedene Texte zuweisen möchte.

    Danke für eure Mühen!



  • Deklariere die Variablen vor deinem if-else-Konstrukt und kopiere dann, je nach Auswahl, mittels strcpy(..) die String-Literale in deine Variablen.

    //Methode die den eigentlich Transfer ausführt
    void Bankautomat::Transfer(char auswahl)
    {
        char ausgabe[128]         = ""; //Erscheint in der Überschrift
        char ausgabeText[128]     = ""; //erscheint bei gewünschtem Betrag
        char ausgabeFunktion[128] = ""; //Erscheint in der Statusmeldung
    
        if(auswahl == 'e')
        {
            strcpy(ausgabe, "Einzahlung");
            strcpy(ausgabeText, " einzahlen");
            strcpy(ausgabeFunktion, " wird auf Ihr Konto gebucht!"); 
        }
        else if(auswahl == 'a')
        {
            // Analog zum if
        }
    
        //...Hier sollen die eben erstellten chars zu verfügung stehen      
    }
    

    @Baltur: Das ist aber falsch

    char Test[4][2];
    
    Test[1][1]='Eingabe';
    Test[2][1]='Status';
    Test[3][1]='BlaBlaBla';
    Test[1][2]='10';//Wert von Eingabe
    Test[2][2]='20';//Wert von Status
    Test[3][2]='30';//Wert von BlaBlaBla
    Test[4][2]='\0';
    

    Erstens beginnt in C++ die Array-Nummerierung bei 0. Zweitens werden String-Literale in doppelte Anführungszeichen eingeschlossen. Drittens ist es nicht notwendig einen String-Literal extra mit NUL zu terminieren (Abgesehen davon macht das '\0' in deinem Beispiel keinen Sinn). Viertens müsste dein Array eigentlich dreidimensional sein (für die Zeichen der Strings)



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Also ich würde doch zwei unterschiedliche Funktionen nehmen. Einzahlung und Auszahlung unterscheiden sich doch eigentlich schon sehr von einander. Zum Beispiel prüfst du den Zahlungsbetrag auf einen Mindesteinzahlungsbetrag, obwohl es auch eine Auszahlung sein könnte.



  • Jawoll, recht herzlichen Dank!

    So hatte ich mir das vorgestellt. Allerdings bekomme ich jetzt Warnungen angezeigt.

    kann ich das mit der Kontruktion auch machen, wenn ich mit einer Variablen zwei unterschiedliche FUnktionen aufrugen möchte?



  • timkon schrieb:

    Jawoll, recht herzlichen Dank!

    So hatte ich mir das vorgestellt. Allerdings bekomme ich jetzt Warnungen angezeigt.

    Und diese Warnungen sollen wir jetzt mit Hilfe unserer Kristallkugeln erraten? 😉

    MfG SideWinder



  • meine meinung:
    es gibt keinen string, der sich nicht mit sprintf() zusammenbasteln lässt...



  • nein sollt ihr nicht. Das will ich euch mal nicht zu muten :-).

    habt ihr mein editierten beitrag schon gelesen?

    tja das mit dem Tesen is so ne Sache, muss ich mal tesen vielleicht kann man das alles immer testen oder so mal sehen. Wenn nicht nehme ich vielleichtdoch zwei Funktionen, ist dann vielleicht verständlicher und übersihtlicher!



  • Andrey schrieb:

    meine meinung:
    es gibt keinen string, der sich nicht mit sprintf() zusammenbasteln lässt...

    Mag sein, aber sprintf() ist nicht typensicher. C++ verfolgt aber gerade in diesem Punkt einen sehr strengen Weg.

    MfG SideWinder



  • Wie kann ich denn über eine Variable Kontostand zwei verschiedene Funktionen aufrufen?

    Also vielelicht auch so wie mit dem strcpy?

    einmal möchte ich haben neuerKontostand = Funktion1(); und dann neuerKontostand = Funktion2();

    versteht ihr?

    Hat sich schon erldeigt, hab es anders geregelt!


Anmelden zum Antworten