Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hat C++ Bugs?
06.02.2011, 00:16 (Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2011 07:49 von 4Soldier93.)
Beitrag: #1
Hat C++ Bugs?
Hab hier mal nen Quellcode...
Code:
//Includes
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <iomanip>
#include <math.h>
#include <sstream>

using namespace std;

//Strukturen
struct Seiten
{
       float a;
       float b;
};

//Klasse Kreis
class Kreis
{    
      //Privat
      private:
              //Eigenschaften
              float radius;
              float umfang;
              float flaeche;
      
      //Öffentlich
      public:
             //Konstruktoren
             Kreis();
             ~Kreis();
            
             //Prototypen
             void setRadius();
             float getRadius();
             float getUmfang();
             float getFlaeche();
};

Kreis::Kreis()
{
            this->radius = 0;
            this->umfang = 0;
            this->flaeche = 0;
};

Kreis::~Kreis()
{

}

void Kreis::setRadius()
{
     system("cls");
     string rad;
     do
     {
       cout << "Bitte geben sie den Radius ein: ";
      
       getline(cin,rad); cin.clear();
       stringstream sstr(rad);
       sstr >> radius;
      
       system("cls");
      
       if (this->radius <= 0) cout << endl << "Fehler: Wert muss groesser 0 sein" << endl << endl;
     }
     while(this->radius <= 0);

     this->umfang = (2*M_PI)*(this->radius);
     this->flaeche = (M_PI)*(this->radius*this->radius);
};

float Kreis::getRadius()
{
    return this->radius;
};

float Kreis::getUmfang()
{
    return this->umfang;
};

float Kreis::getFlaeche()
{
    return this->flaeche;
};

//Klasse Rechteck
class Rechteck
{    
      //Privat
      private:
              //Eigenschaften
              struct Seiten Laenge;
              float umfang;
              float flaeche;
      
      //Öffentlich
      public:
             //Konstruktoren
             Rechteck();
             ~Rechteck();
            
             //Prototypen
             void setSeiten();
             struct Seiten getSeiten();
             float getUmfang();
             float getFlaeche();
};

Rechteck::Rechteck()
{
            this->Laenge.a = 0;
            this->Laenge.b = 0;
            this->umfang = 0;
            this->flaeche = 0;
};

Rechteck::~Rechteck()
{

};

void Rechteck::setSeiten()
{
     system("cls");
     do
     {
       cout << "Bitte geben sie die Laenge a ein: ";
      
       string laenge;
       getline(cin,laenge); cin.clear();
      
       stringstream sstr(laenge);
       sstr >> this->Laenge.a;
      
       if (this->Laenge.a <= 0) cout << endl << "Fehler: Wert muss groesser 0 sein" << endl << endl;
     }
     while(this->Laenge.a <= 0);
     system("cls");
    
     do
     {
       cout << "Bitte geben sie die Laenge a ein: " << Laenge.a << endl;
       cout << "Bitte geben sie die Laenge b ein: ";
      
       string laenge;
       getline(cin,laenge); cin.clear();
      
       stringstream sstr(laenge);
       sstr >> this->Laenge.b;
      
       system("cls");
      
       if (this->Laenge.b <= 0) cout << endl << "Fehler: Wert muss groesser 0 sein" << endl << endl;
     }
     while(this->Laenge.b <= 0);

     this->umfang = (2*Laenge.a)+(2*Laenge.b);
     this->flaeche = Laenge.a*Laenge.b;
};

struct Seiten Rechteck::getSeiten()
{
    return Laenge;
};

float Rechteck::getUmfang()
{
    return this->umfang;
};

float Rechteck::getFlaeche()
{
    return this->flaeche;
};


//Prototypen
int Menue_KREIS();
int Menue_RECHTECK();
void Radiusausgabe(float WERT,int ERW, int ERW2);
void Seitenausgabe(struct Seiten Laenge, int ERW, int ERW2);
void Umfangausgabe(float WERT,int ERW, int ERW2);
void Flaecheausgabe(float WERT, int ERW, int ERW2);

//Enum
enum ART
{
     KREIS,RECHTECK, ENDE
};

int main()
{
    int auswahl;
    
    ART ART = KREIS;
    do
    {
        switch(ART)
        {
                  
                  
            case KREIS:
            {    
                Kreis *Berechnung = new Kreis;
                auswahl = 0;
                
                do
                {
                  auswahl = 0;
                  auswahl = Menue_KREIS();
                  
                  switch(auswahl)
                  {
                   case 1:
                        Berechnung->setRadius();
                        break;
                   case 2:
                        Radiusausgabe(Berechnung->getRadius(),1,1);
                        break;
                   case 3:
                        Umfangausgabe(Berechnung->getUmfang(),1,1);
                        break;
                   case 4:
                        Flaecheausgabe(Berechnung->getFlaeche(),1,1);
                        break;
                   case 5:
                        Radiusausgabe(Berechnung->getRadius(),1,0);
                        Umfangausgabe(Berechnung->getUmfang(),0,0);
                        Flaecheausgabe(Berechnung->getFlaeche(),0,1);
                        break;
                        
                   default:
                                      cout << endl << endl << "Falsche Zahl eingegeben! Bitte Eingabe wiederholen!";
                                      getch();
                   }
    
                }while((auswahl != 9) && (auswahl != 7));
                
                if(auswahl == 9) ART = ENDE;
                if(auswahl == 7) ART = RECHTECK;
                
                delete Berechnung;
            }
                break;
          
          
            
            case RECHTECK:
            {    
            
                Rechteck *Berechnung = new Rechteck;
                auswahl = 0;
                
                do
                {
                  auswahl = Menue_RECHTECK();
                  
                  switch(auswahl)
                  {
                   case 1:
                        Berechnung->setSeiten();
                        break;
                   case 2:
                        Seitenausgabe(Berechnung->getSeiten(),1,1);
                        break;
                   case 3:
                        Umfangausgabe(Berechnung->getUmfang(),1,1);
                        break;
                   case 4:
                        Flaecheausgabe(Berechnung->getFlaeche(),1,1);
                        break;
                   case 5:
                        Seitenausgabe(Berechnung->getSeiten(),1,0);
                        Umfangausgabe(Berechnung->getUmfang(),0,0);
                        Flaecheausgabe(Berechnung->getFlaeche(),0,1);
                        break;
                        
                   default:
                           if(auswahl != 9 && auswahl != 7)
                           {
                                      cout << endl << endl << "Falsche Zahl eingegeben! Bitte Eingabe wiederholen!";
                                      getch();
                           }
                          
                  }
    
                }while((auswahl != 9) && (auswahl != 7));
                
                if(auswahl == 9) ART = ENDE;
                if(auswahl == 7) ART = KREIS;
                
                delete Berechnung;
           };
                break;    
        };
    }while(ART != ENDE);
}

int Menue_KREIS()
{
     int backwert = 0;
     string menue;
    
     system("cls");
     cout << "Menue (Kreis):" << endl << endl;
     cout << "1. Radius eingeben" << endl;
     cout << "2. Radius ausgeben" << endl;
     cout << "3. Umfang ausgeben" << endl;
     cout << "4. Flaeche ausgeben" << endl;
     cout << "5. Alles ausgeben" << endl;
     cout << endl << "7. Zu Rechteck wechseln" << endl;
     cout << endl << "9. Programm beenden" << endl;
     cout << endl << "Ihre Eingabe: ";
    
     getline(cin,menue); cin.clear();
    
     stringstream sstr(menue);
     sstr >> backwert;
    
     return backwert;
};

int Menue_RECHTECK()
{
     int backwert = 0;
     string menue;
    
     system("cls");
     cout << "Menue (Rechteck):" << endl << endl;
     cout << "1. Seite a und b eingeben" << endl;
     cout << "2. Seite a und b ausgeben" << endl;
     cout << "3. Umfang ausgeben" << endl;
     cout << "4. Flaeche ausgeben" << endl;
     cout << "5. Alles ausgeben" << endl;
     cout << endl << "7. Zu Kreis wechseln" << endl;
     cout << endl << "9. Programm beenden" << endl;
     cout << endl << "Ihre Eingabe: ";
    
     getline(cin,menue); cin.clear();
    
     stringstream sstr(menue);
     sstr >> backwert;
    
     return backwert;
};

void Radiusausgabe(float WERT, int ERW, int ERW2)
{
     if(ERW == 1) system("cls");
     cout << "Der Radius ist: " << setprecision(3) << WERT << endl;
     if(ERW2 == 1) getch();
};

void Seitenausgabe(struct Seiten Laenge, int ERW, int ERW2)
{
     if(ERW == 1) system("cls");
     cout << "Laenge a: " << setprecision(3) << Laenge.a << endl;
     cout << "Laenge b: " << setprecision(3) << Laenge.b << endl;
     if(ERW2 == 1) getch();    
};

void Umfangausgabe(float WERT, int ERW, int ERW2)
{
     if(ERW == 1) system("cls");
     cout << "Der Umfang ist: " << setprecision(3) << WERT << endl;
     if(ERW2 == 1) getch();
};

void Flaecheausgabe(float WERT, int ERW, int ERW2)
{
     if(ERW == 1) system("cls");
     cout << "Die Flaeche ist: " << setprecision(3) << WERT << endl;
     if(ERW2 == 1) getch();
};

Den Quellcode habe ich geschrieben weil wir das als hausaufgabe auf bekommen haben, jetzt lern ich gerade für mich den Umgang mit "Strings". Deswegen habe ich hier eine Stringkonvertierung eingebaut von "String" to "int" per Funktion "std::stringstream".

Die erste Eingabe funktioniert, also zum bsp. 1 (case 1) für Radiuseingabe. habe ich den Radius aber eingeben und bestätigt, so wird im Switch-case der "default" aufegerufen, obwohl im case 1 doch en break steht.
Warum überspringt der denn nicht einfach "default" -.- ???

ps. bin noch ned mit quellcode fertig... also ned über Funktionseinsatz wundernBig Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2011, 08:58
Beitrag: #2
RE: Hat C++ Bugs??!??
Ich schaus mir demnächst mal an.

kwoxer.de - das kwoxt!
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2011, 11:45
Beitrag: #3
RE: Hat C++ Bugs??!??
Danke Kwoxer...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.02.2011, 14:48
Beitrag: #4
RE: Hat C++ Bugs?
Ähm Kwoxer??
Wann schaust du mal danach^^??[/align]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2011, 21:53 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2011 21:53 von kwoxer.)
Beitrag: #5
RE: Hat C++ Bugs?
So habs mir eben ausgeschaut, verstehe aber nicht was deine Frage soll.

Es funktioniert doch wunderbar.

default kommt nur bei falscher Menuzahl Eingabe.

Ansonsten erkläre bitte nochmal was das Problem ist.

kwoxer.de - das kwoxt!
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Kontakt | kwoxer.de Forum | Nach oben | Zum Inhalt | Archiv-Modus | RSS-Synchronisation