Variablen auch außerhalb von if und else



  • Hi ich habe hier diese Funktion:

    [cpp]
    //Methode die den eigentlich Transfer ausführt
    void Bankautomat::Transfer(char auswahl) {
    	//....
    		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!";
    		}
    
    		//...Hier sollen die eben erstellten char`s zu verfügung stehen
    
    }
    [/cpp]
    

    Ich möchte damit verschiedene Textstücke ausgeben wie man sieht, aber wenn ich dass so mache wie ich es vorhatte dann sagt er mir, dass er die Variablen ausgabe usw nicht kennt.

    Wie bekomme ich es nun hin, dass ich die Variablen außerhalb von der if und else Konstruktion habe, sodass ich sie in der Funktion weiter nutzen kann?

    Danke für Hilfe!



  • meines erachtens nach so......

    char ausgabe[1] = "Einzahlung"; //Erscheint in der Überschrift
    char ausgabeText[1] = " einzahlen"; //erscheint bei gewünschtem Betrag
    char ausgabeFunktion[1] = " wird auf Ihr Konto gebucht!"; //Erscheint i Status
    

    ach ja.. das lezte zeichen des arrays muss auf \0 gesezt werden....

    z.B

    ausgabe[15]='\0';
    

    wenn 15 das lezte zeichen des chars ist oder das lezte was du verwenden willst.....



  • Ja danke, da wäre ich auch drauf gekommen. Meine Funtkion bekommt aber eine Variable übergeben anhand dieses Variable ändern sich ja die Texte in den deklarierten char Variablen.

    Jetzt könnte ich natürlich die Ausgabe(die ich vorhabe) auch einmal in else und einmal in if schreiben. Das wäe aber blödsinn, da sich immer nur 3 Wörter ändern.

    Und zwei Funtkionen von machen wäre auch Blödsinn, weil sich eben nur die drei Wörter ändern, der Rest ist gleich.

    Aber wenn es nicht anders geht muss ich das wohl so machen.

    Habe eben erst das editierte gelesen, aber das geht auch nicht,

    Danke für weiter Hilfe!



  • 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