Announcement

Collapse
No announcement yet.

If Anweisung wird nicht ausgeführt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • If Anweisung wird nicht ausgeführt

    Hallo,

    bin noch ein C++ Anfänger und hoffe das ich hier richtig bin mit meiner Frage.

    Habe ein Programm geschrieben (der Code kommt weiter unten) das mir in der Funktion "Verkauf" über die If- Anweisung einfach rüberläuft ohne sie auszuführen, obwohl die Bedingung eintritt um sie auszuführen (If-Anweisung ist im Code mit rot Makiert).
    Hoffe es kann mir jemand helfen und hier jetzt mein Code:
    Code:
    #include <iostream>
    
    using namespace std;
    
    #define ANZAHL1 10
    #define ANZAHL2 5
    
    struct Auto
    {
    	char firma[20];
    	char model[20];
    	int anzahl;
    	double preis;
    	int bestnr;
    };
    
    struct Kunde
    {
    	char name[30];
    	char vorname[20];
    	char strasse[30];
    	int hausnr;
    	int plz;
    	char stadt[30];
    	int tele;
    	int bestnr[ANZAHL2];
    	int anzBestnr;
    };
    
    int anzKunden = 0;
    int anzAuto = 0;
    
    void menue(struct Auto *s_auto, struct Kunde *s_kunde);
    void AnKunde(struct Kunde *s_kunde);
    void AnAuto(struct Auto *s_auto);
    void Verkauf(struct Auto *s_auto, struct Kunde *s_kunde);
    void AusKunde(struct Kunde *s_kunde, struct Auto *s_auto);
    void AusAuto(struct Auto *s_auto);
    int ausAuto(int bestnr, struct Auto *s_auto);
    
    int main()
    {
    	Auto s_auto[ANZAHL1];
    	Kunde s_kunde[ANZAHL1];
    
    	menue(s_auto, s_kunde);
    
    
    	system("Pause");
    	return (0);
    }
    
    void menue(struct Auto *s_auto, struct Kunde *s_kunde)
    {
    	int auswahl;
    
    	do
    	{
    		cout << "****************************" << endl;
    		cout << "** (1) Kunde anlegen      **" << endl;
    		cout << "** (2) Fahrzeug anlegen   **" << endl;
    		cout << "** (3) Fahrzeug verkauft  **" << endl;
    		cout << "** (4) Kunden ausgeben    **" << endl;
    		cout << "** (5) Fahrzeuge ausgeben **" << endl;
    		cout << "** (6) Programm Beenden   **" << endl;
    		cout << "****************************" << endl;
    		cout << "Auswahl: ";
    		cin >> auswahl;
    		cout << endl << endl;
    
    		switch (auswahl)
    		{
    		case 1:
    			{
    				AnKunde(s_kunde);
    			}
    			break;
    		case 2:
    			{
    				AnAuto(s_auto);
    			}
    			break;
    		case 3:
    			{
    				Verkauf(s_auto, s_kunde);
    			}
    			break;
    		case 4:
    			{
    				AusKunde(s_kunde, s_auto);
    			}
    			break;
    		case 5:
    			{
    				AusAuto(s_auto);
    			}
    			break;
    		case 6:
    			{
    				cout << "Programm wird Beendet!" << endl << endl;
    			}
    			break;
    		default:
    			{
    				cout << "Menuepunkt nicht vorhanden!!" << endl << endl;
    			}
    		}
    	} while (auswahl != 6);
    }
    
    void AnKunde(struct Kunde *s_kunde)
    {
    	if (anzKunden < ANZAHL1)
    	{
    		cout << "**** Erfassung der Kundendaten ****" << endl << endl;
    
    		cout << "Vorname: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(s_kunde[anzKunden].vorname, 20);
    		
    		cout << endl;
    		cout << "Nachname: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(s_kunde[anzKunden].name, 30);
    
    		cout << endl;
    		cout << "Strasse: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(s_kunde[anzKunden].strasse, 30);
    
    		cout << endl;
    		cout << "Hausnummer: ";
    		cin >> s_kunde[anzKunden].hausnr;
    
    		cout << endl;
    		cout << "Postleitzahl: ";
    		cin >> s_kunde[anzKunden].plz;
    
    		cout << endl;
    		cout << "Stadt: ";
    		cin >> s_kunde[anzKunden].stadt;
    
    		cout << endl;
    		cout << "Telefonnummer: ";
    		cin >> s_kunde[anzKunden].tele;
    
    		cin.clear();
    		cin.sync();
    
    		cout << endl << endl;
    
    		s_kunde[anzKunden].anzBestnr = 0;
    
    		anzKunden++;
    	}
    	else
    	{
    		cout << "Sie haben die Maximale Anzahl an Kunden schon eingegeben!" << endl << endl;
    	}
    }
    
    void AnAuto(struct Auto *s_auto)
    {
    	if (anzAuto < ANZAHL1)
    	{
    		cout << "**** Erfassung der Fahrzeugdaten ****" << endl << endl;
    
    		cout << "Fabrikat/Firma: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(s_auto[anzAuto].firma, 20);
    
    		cout << endl;
    		cout << "Model: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(s_auto[anzAuto].model, 20);
    
    		cout << endl;
    		cout << "Anzahl: ";
    		cin >> s_auto[anzAuto].anzahl;
    
    		cout << endl;
    		cout << "Preis: ";
    		cin >> s_auto[anzAuto].preis;
    
    		cout << endl;
    		cout << "Bestellnummer: ";
    		cin >> s_auto[anzAuto].bestnr;
    
    		cout << endl << endl;
    
    		cin.clear();
    		cin.sync();
    
    		anzAuto++;
    	}
    	else
    	{
    		cout << "Sie haben die Maximale Anzahl von Autos schon eingegeben!" << endl << endl;
    	}
    }
    
    void Verkauf(struct Auto *s_auto, struct Kunde *s_kunde)
    {
    	int bestnr = 0;
    	int pos = 0;
    	char firma[20];
    	char model[20];
    	char name[30];
    	char vorname[20];
    
    	cout << "**** Fahrzeug verkauf ****" << endl << endl;
    
    	cout << "Fabrikat/Firma: ";
    	cin.clear();
    	cin.sync();
    	cin.getline(firma, 20);
    
    	cout << endl;
    	cout << "Model: ";
    	cin.clear();
    	cin.sync();
    	cin.getline(model, 20);
    
    	cout << endl << endl;
    
    	for (int i=0; i < anzAuto; i++)
    	{
    		if (s_auto[i].firma == firma && s_auto[i].model == model)
    		{
    			if (s_auto[i].anzahl > 0)
    			{
    				bestnr = s_auto[i].bestnr;
    				s_auto[i].anzahl--;
    			}
    			else
    			{
    				cout << "Kein Fahrzeug von dieser Marke mehr vorhanden!" << endl << endl;
    				bestnr = -1;
    			}
    		}
    	}
    	if (bestnr == 0)
    	{
    		cout << "Fahrzeug nicht im Sortiement" << endl << endl;
    	}
    	else if (bestnr > 0)
    	{
    		cout << "Name des Kunden: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(name, 30);
    
    		cout << endl;
    		cout << "Vorname des Kunden: ";
    		cin.clear();
    		cin.sync();
    		cin.getline(vorname, 20);
    
    		for (int i=0; i < anzKunden; i++)
    		{
    			if (s_kunde[i].name == name && s_kunde[i].vorname == vorname)			{
    				if (s_kunde[i].anzBestnr <= (ANZAHL2 - 1))
    				{
    					s_kunde[i].bestnr[s_kunde[i].anzBestnr] = bestnr;
    					s_kunde[i].anzBestnr++;
    
    					cout << "Der Kunde " << name << ", " << vorname << "erwarb das Fahrzeug " << endl;
    					cout << model << " von der Firma " << firma << ". Herzlichen Glückwunsch!!" << endl << endl;
    				}
    				else
    				{
    					cout << "Kein verkauf an den Kunden mehr möglich!" << endl << endl; 
    				}
    			}
    		}
    	}
    }
    
    void AusKunde(struct Kunde *s_kunde, struct Auto *s_auto)
    {
    	cout << "**** Ausgabe aller Kundendaten ****" << endl << endl;
    
    	for (int i=0; i<anzKunden; i++)
    	{
    		cout << "Name: " << s_kunde[i].name << endl;
    		cout << "Vorname: " << s_kunde[i].vorname << endl;
    		cout << "Strasse: " << s_kunde[i].strasse << endl;
    		cout << "Hausnummer: " << s_kunde[i].hausnr << endl;
    		cout << "Postleitzahl: " << s_kunde[i].plz << endl;
    		cout << "Stadt: " << s_kunde[i].stadt << endl;
    		cout << "Telefonnummer: " << s_kunde[i].tele << endl;
    		if (s_kunde[i].anzBestnr > 0)
    		{
    			int x=0;
    
    			for (int j=0; j<s_kunde[i].anzBestnr; j++)
    			{
    				cout << "Bestellung " << j+1 << ": ";
    				x = ausAuto(s_kunde[i].bestnr[j], s_auto);
    				cout << s_auto[x].firma << " " << s_auto[x].model;
    				cout << endl;
    			}
    		}
    		else
    		{
    			cout << "Kunde hat noch keinen Einkauf bei ihnen getaetigt." << endl;
    		}
    		cout << endl;
    	}
    }
    
    void AusAuto(struct Auto *s_auto)
    {
    	cout << "**** Anzeige aller Fahrzeuge im Sortiement ****" << endl << endl;
    
    	if (anzAuto == 0)
    	{
    		cout << "Kein Fahrzeug vorhanden" << endl << endl;
    	}
    	else
    	{
    		for (int i=0; i<anzAuto; i++)
    		{
    			cout << "Fabrikat/Firma: " << s_auto[i].firma << endl;
    			cout << "Model: " << s_auto[i].model << endl;
    			cout << "Preis: " << s_auto[i].preis << " Euro" << endl;
    			cout << "Bestellnummer: " << s_auto[i].bestnr << endl;
    			cout << "Anzahl: " << s_auto[i].anzahl << endl;
    		}
    	}
    }
    int ausAuto(int bestnr, struct Auto *s_auto)
    {
    	int j=0;
    
    	for (int i=0; i<anzAuto; i++)
    	{
    		if(s_auto[i].bestnr == bestnr)
    		{
    			j = i;
    		}
    	}
    	return (j);
    }
    Grüße
    Sindbad

  • #2
    Setze an dieser Stelle ein Breakpoint und schaue dir die Variablen an
    Christian

    Comment


    • #3
      Originally posted by Sindbad01 View Post
      Habe ein Programm geschrieben (der Code kommt weiter unten) das mir in der Funktion "Verkauf" über die If- Anweisung einfach rüberläuft ohne sie auszuführen, obwohl die Bedingung eintritt um sie auszuführen (If-Anweisung ist im Code mit rot Makiert)
      Nö, eigentlich macht das Programm alles richtig. Du vergleichst zwei char-Pointer von structs, und die char-Pointer sind nicht gleich, also ist die Bedingung nicht wahr. Versuche es mal mit strcmp() oder verwende String-Klassen, die eine passenden ==-Operator besitzen.

      Und schaue Dir mal an, was ein Debugger ist. Man lernt aus Fehlern und Fehler entdeckt man beim Debuggen.
      Dirk

      Comment


      • #4
        Ursache dürfte sein, dass du chars

        if (s_auto[i].firma == firma

        auf diese Art zu vergleichen versuchst. Das ist in C/C++ nicht möglich. Zum Vergleichen gibt es extra Funktionen

        strcmp
        strcmpi

        und weitere

        EDIT

        Tja, mein Debugger hat etwas gebraucht......
        Christian

        Comment


        • #5
          Hallo,
          hgdorn hat schon recht. Zudem würde ich Dir erst einmal raten ein C++ Buch in die Hand zu nehmen und damit der C-Welt abtrünnig werden und mich der OO-Welt insbesondere hier C++ zuwenden. Du programmierst angeblich in C++, aber man merkt das am Source eigentlich nicht, bis auf die cout's. struct verwendet man eigentlich auch nicht, sondern Class. Abkürzungen sind eigentlich auch nicht so klasse und Tabulatoren würde ich auch nicht verwenden, sieht überall anders aus. Also lies bitte parallel ein Buch, dann wird der Code auch sauberer und wartbarer, auch für Dich.

          Gruß,
          Dirk

          Comment


          • #6
            Danke an alle für eure Hilfe.

            @ecker Benutze ein C++ Buch und C habe ich nicht gelernt und das was im Code zu finden ist, ist de stand meiner gelernten Dinge in C++ aus der Schule und aus dem Buch. Programiere beruflich hauptsächlich in VB.net .

            Debugger hab ich benutzt und wenn ich mir dort die Variablen anschaue, haben sie die gleichen Werte.

            Aber dank Eurer hilfe geht es jetzt, nur der Lehrer meint das kann man anders Lösen weil wir diese Befehle noch nicht hatten.

            Grüße Sindbad

            Comment

            Working...
            X