C++ Mein Abfrageprogramm gibt mir nur eine der verfügbaren antworten aus.

HeideltrautDE

Newbie
Registriert
Nov. 2017
Beiträge
1
Ich bin gerade dabei ein Abfrageprogramm zu erstellen und dachte ich bin nun fertig doch gibt das Programm nur eine der verfügbaren antworten aus selbst wenn ich eine andere Bedingung eingebe.

Code:
#include <cstdlib>
#include <iostream>


using namespace std;
int Speicher1;
int Speicher2;
int Speicher3;
int main()
{

       int Alter;
    char ch_Alter;
    
    cout<< "Sind sie über 18 Jahre? J/N" <<endl;
    cin>> ch_Alter;
    
    if(ch_Alter == 'n')
    
    {
       Speicher1 = 0;
        
    }
    else(ch_Alter == 'j');
    {
        Speicher1 = 1;
        cout << "Ist der Wahrenwert mehr als 1000€? J/N" <<endl;
    }
    
    int Wahrenwert;
    char ch_Wahrenwert;
    
    cin>> ch_Wahrenwert;
    
    if(ch_Wahrenwert == 'n')
    {
        Speicher2 = 0;
        
    }
    else(ch_Wahrenwert == 'j');
    {
        Speicher2 = 1;
        cout<< "Ist der Kunde Mitglied? J/N" <<endl;
    }
    
    int Mitgliedschaft;
    char ch_Mitgliedschaft;
    
    cin>> ch_Mitgliedschaft;
    
    if(ch_Mitgliedschaft == 'n')
    {
        Speicher3 = 0;
        
    }
    else(ch_Mitgliedschaft == 'j');
    {
        Speicher3 = 1;
        cout<< "Ausgabe? J/N?" << endl;
    }
    
    int Ausgabe;
    char ch_Ausgabe;
    
    cin>> ch_Ausgabe;
    
    if(ch_Ausgabe == 'n')
    {
        cout<< "Dann eben nicht..." <<endl;
       
    }
    else(ch_Ausgabe == 'j');
    {
         if( Speicher1 + Speicher2 + Speicher3 == 111)
    {
        cout<< "ERROR Mitgliedschaft unter 18 nicht Möglich!!!" <<endl;
        
    }
        else if( Speicher1 + Speicher2 + Speicher3 == 011)
    {
        cout<< "20% Ermäßigung" <<endl;
        
    }
        else if( Speicher1 + Speicher2 + Speicher3 == 001)
    {
        cout<< "20% Ermäßigung" <<endl;
        
    }
        else if( Speicher1 + Speicher2 + Speicher3 == 000)
    {
        cout<< " 0 Ermäßigung" <<endl;
        
    }
        else if( Speicher1 + Speicher2 + Speicher3 == 100)
    {
        cout<< " 5% Ermäßigung" <<endl;
        
    }
        else if( Speicher1 + Speicher2 + Speicher3 == 010)
    {
        cout<< " 15% Ermäßigung" <<endl;
        
    }
        else if( Speicher1 + Speicher2 + Speicher3 == 110)
    {
        cout<< " 20% Ermäßigung" <<endl;
        
    }
        else ( Speicher1 + Speicher2 + Speicher3 == 101);
    {
        cout<< "ERROR Mitgliedschaft unter 18 nicht Möglich!!!" <<endl;
        
    }
 
}
    int Ende;
    char ch_Ende;
    
    cout<< "Wollen sie die das Fenster jetzt schließen? Dann bitte auf: 'j'" <<endl;
    cin>> ch_Ende;
    
    if(ch_Ende == 'j')
    
    {
       return 0; 
    }
    
}

währe cool wenn ihr mir ein paar Vorschläge geben könntet.
 
Ich muss zugeben ich bin nicht wirklich mit C++ vertraut, aber deine speicher1 + speicher2 + speicher3 berechnung sollte in Integer rechnen. Das heißt dein Ergebnis reicht von 0-3.
Was ich auch fragen muss: Erkennt C++ deine Zahlen rechts im Vergleich auch als Bitfolge an? Also rechnet er sie dann nicht in Integer um?

Und nebenbei: Es heißt "Warenwert", aber das ist unwichtig :D
 
Hi Heideltraut,

also ich nehme mal an, dass nur der ELSE Teil deiner if-Abfrage Funktioniert. Das liegt daran, dass du "Speicher1 + Speicher2 + Speicher3" rechnest und diese drei zusammen-addiert maximal 3 ergeben können (also maximal 0b11). Du kannst hier also entwerder Speicher1 0 und 1 zuweisen, Speicher2 10 und 0 und Speicher3 100 und 0 zuweisen oder Bit-Weise Shifts verwenden oder ähnliche Prozeduren.

Es gibt hier mehrere Lösungsansätze aber "von Haus aus" rechnet c++ in Dezimal und nicht in Binär, das solltest du immer bedenken.

vG
Adrian
 
Was soll denn

Code:
else(ch_Alter == 'j');

für eine komische Konstruktion sein?

Außerdem scheinst du nicht richtig zu verschachteln. Mir sieht es so aus, als solle die jeweils nächste Frage nur erscheinen, wenn einer vorhergehende Bedingung erfüllt ist. Tatsächlich liest du Eingaben dazu aber in jedem Fall ein. Ich empfehle, nochmal ganz scharf auf die Klammern zu schauen oder dir einen Ablaufplan auf dem Papier anzufertigen.
 
Ich bin zwar schon eine ganze Zeit aus der C-Programmierung draußen, aber das Programmdesign sieht so absolut gruselig aus.
Dein Ausgabeblock kann aus den erwähnten Gründen in der Form überhaupt nicht funktionieren.

In den Zeilen 6-8 weist du Speicher1, Speicher2 und Speicher3 den Datentyp int zu. D.h., daß der Wert der im Ausgabeblock behandelt wird entweder 0, 1, 2 oder 3 beträgt. Im Ausgabeblock scheinst du aber einen binären Zahlenwert anzunehmen. Das kann schon mal nicht funktionieren.

Darüber hinaus hast du Logikfehler in deinem Programm.

Wenn die Variable Speicher1 == 0 ist bedeutet das in Zeile 21 das der Kunde unter 18 ist, im Ausgabeblock sagst du aber das Gegenteil.

Du solltest dich noch einmal hinsetzen und genau nachdenken was dein Programm wie machen soll. Außerdem lege ich dir die grundlegende Beschäftigung mit den Datentypen ans Herz.
 
Treffen wir eine Annahme an die Wertetabelle so kann man es vereinfachen:

Code:
#include <cstdlib>
#include <iostream>


using namespace std;

char leseJOderN()
{
    // so lange eine Eingabe erfragen, bis j oder n eingegeben wurde
    char ch_Eingabe = 0;
    while (true)
    {
        cin >> ch_Eingabe;
        if (ch_Eingabe == 'n' || ch_Eingabe == 'j')
            break;
        cout << "Bitte geben sie j oder n als Antwort an" << endl;
    }
    return ch_Eingabe;
}

int main()
{
    cout << "Sind sie über 18 Jahre? J/N: ";

    char ch_Eingabe = leseJOderN();
    bool uber18 = (ch_Eingabe == 'j');

    cout << "Ist der Warenwert mehr als 1000€? J/N: ";

    ch_Eingabe = leseJOderN();
    bool wertMehrAls = ch_Eingabe == 'j';

    cout << "Ist der Kunde Mitglied? J/N: ";

    ch_Eingabe = leseJOderN();
    bool kundeMitglied = ch_Eingabe == 'j';

    cout << "Ausgabe? J/N?: ";

    ch_Eingabe = leseJOderN();
    bool ausgabe = ch_Eingabe == 'j';

    if (!ausgabe) //das gleiche wie ausgabe == false
    {
        cout << "Dann eben nicht..." << endl;
    }
    else
    {
        if (!uber18)
        {
            cout << "ERROR Mitgliedschaft unter 18 nicht Möglich!!!" << endl;
        }
        else if(kundeMitglied)
        {
            cout << "20% Ermäßigung" << endl;
        }
        else if (wertMehrAls)
        {
            cout << "15% Ermäßigung" << endl;
        }
        else
        {
            cout << "5% Ermäßigung" << endl;
        }
    }

    cout << "Wollen sie die das Fenster jetzt schließen? J/N: ";
    ch_Eingabe = leseJOderN();
    bool beendeProgram = ch_Eingabe == 'j';
    // es fragt sich welchen sinn diese abfrage ergibt

    return 0;
}
 
Zurück
Oben