Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » symmetrisches Dreieck und abfangen von Buchstaben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
06.06.2006, 16:24 Uhr
~Matthaei
Gast


Hallo liebe Forenleser!

Ich habe eine Prüfungsaufgabe, die ich schon weitesgehend bearbeitet habe, allerdings soll ich bei der Eingabe der Höhe und der Breite die Buchstaben abfangen.

Wenn man jetzt einen Buchstaben eingibt, landet man in einer Endlosschleife.
Es soll aber wie bei der Eingabe einer höheren Zahl zwischen 6 und 24 die Fehlermeldung ausgeben und wieder an den Anfang springen.

Ich glaube, man muss das irgendwie mit Char machen und dann wieder in int umformen, aber ich komm nicht drauf, wie es am besten klappt.
Wäre schön wenn wir jemand helfen könnte, denn es ist nur noch dieses Problem und das Ding muss ich bis heute Abend fertig kriegen

Vielen Dank

hier der Code


C++:
#include <iostream.h>
#include <iomanip.h>    //Bibliothek für den Befehl setw(x)
#include<stdlib.h>  


void main()
{

    int hoehe,breite,wiederholen;
    char weiter, spitze;
    int x,i,weite;
    bool Fehler;

do{
    do{
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        x=35;        //Mitte der Spitze
        weite=2;    //Weite des Dreiecks

    //allgemeine Initialisierung der Werte

        hoehe=0;    
        breite=0;
        wiederholen=0;
        weiter=0;
        spitze=0;
        i=0;



    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    system("cls"); // Säubern des Bildschirms

    cout<<endl;
    cout<<"\t  ********************************************"<<endl;
    cout<<"\t\tPruefungsleistung 4 - Aufgabe 4"<<endl<<endl;
    cout<<"\t  Die Darstellung eines symmetrischen Dreiecks"<<endl;
    cout<<"\t  ********************************************"<<endl<<endl;
    cout<<"Geben Sie die Breite des Dreiecks ein (Bereich von 6 - 24)  :";
    cin>>breite;
    cout<<endl;
    cout<<"Geben Sie die H"<<char(148)<<"he des Dreiecks eind (Bereich von 6 - 24)  :";
    cin>>hoehe;
    cout<<endl<<endl;

        if (((breite>5) && (hoehe>5)) && ((breite<25) && (hoehe<25)) && (breite==hoehe))
    {
        cout<<"Wie soll das Dreieck dargestellt werden?"<<endl<<endl;
        cout<<"\t (1) = mit der Spitze nach oben  (2) = mit der Spitze nach unten";
        cout<<endl<<endl;
        cout<<"Ihre Wahl:  ";
        cin>>spitze;


        system("cls"); // Säubern des Bildschirms
        cout<<endl<<endl;

        switch (spitze)
        {
            case '1':
                {
                        cout<<setw(x);                        //Ausgabe der Spitze
                        cout<<char(15)<<endl;
                        x=x--;                                //Abzug von x damit die Darstellung der Schärge gewährleistet ist

                    for (i=3;i<=hoehe; i++)                // i ist die Laufvariable der "for Schleife"
                    {
                        cout<<setw(x);
                        cout<<char(06)<<setw(weite)<<char(06)<<endl;
                        x--;                                //Abzug von x
                        weite=weite+2;
                    }

                    cout<<setw(x);                            //aktuelles x für die untere Darstellung des Dreiecks

                    for (i=0; i<breite; i++)
                    {
                        cout<<char(06);
                        cout<<char(00);                        //Ascii für Leerzeichen
                    }
                    cout<<endl<<endl;
                }    break;

            case '2':
                {
                    x=x-breite;                                //Berechnung der oberen Darstellung des Dreiecks
                    cout<<setw(x);                            //aktuelles x für die obere Darstellung des Dreiecks
                    
                    for(i=+1; i<=breite; i++)
                    {
                        cout<<char(06);
                        cout<<char(00);                        //Ascii für Leerzeichen
                    }

                    cout<<endl;
                    x++;

                    for (i=3; i<=hoehe; i++)
                    {
                        cout<<setw(x);
                        cout<<char(06)<<setw((breite*2)-weite-2)<<char(06)<<endl;
                        x++;
                        breite--;                            
                    }

                    cout<<setw(34)<<char(15)<<endl;
                    
                }    break;
            default:
                {
                    cout<<"Falschen Wert fuer die Spitze eingegeben"<<endl<<endl;

                }
        }

    }
    else
    {
        cout<<"Sie haben einen falschen Wert eingegeben!"<<endl;
        cout<<"Bitte erneuern Sie Ihre Auswahl";
        cout<<endl;
        cout<<"Es wird lediglich ein sym. Dreieck mit den Abmassen 6 - 24 dargestellt"<<endl<<"Sie haben entweder die falschen Zahlen oder einen Buchstaben eingegeben"<<endl<<endl<<endl;
        cout<<"Bitte Druecken sie eine Taste und dann die Enter-Taste um fortzufahren"<<endl<<endl;
        cin>>weiter;
        
        
        Fehler=true;
    }
    }
    while(Fehler==true);

    cout<<"Moechten sie nochmal ein Dreieck anzeigen lassen?"<<endl<<endl;
    cout<<"Druecken sie (1) fuer Ja [Anykey] fuer Nein";
    cout<<endl;
    cin>>wiederholen;
        }
    while(wiederholen==1);

    cout<<endl<<endl<<endl<<endl;
    cout<<"Vielen Dank fuer die Nutzung dieses Programms"<<endl<<endl;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.06.2006, 16:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ohne deinen quellcode lesen zu wollen. Lies es als string ein und überprüfe den inhalt ob er einer gültigen eingabe enstpricht (isdigit, isalpha usw helfen dir dabei)... wenn du eine gültige eingabe hast kannst du aus dem string z.B. mit atoi, atof wieder eine zahl machen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.06.2006, 16:40 Uhr
~Matthäei
Gast


Wow, das ging ja mal echt schnell, respekt!

Aber es gibt da ein Problem...
Das sind für mich irgendwie alles böhmische Dörfer.

Hmmm...das ist mein erstes C Programm...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.06.2006, 16:59 Uhr
Hans
Library Walker
(Operator)


Hi,

nur so nebenbei: Wenn am Anfang des Programms

C++:
#include <iostream.h>


steht, und die Ein- und Ausgaben mit cin und cout erledigt werden, dann handelt es sich um C++, aber nicht um C.
Bei so kleinen Programmen ist der Unterschied zwar noch nicht sehr Gewichtig, aber sobald die Programme länger (oder komplizierter) werden, gewinnt er an Bedeutung.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.06.2006, 19:15 Uhr
~gast
Gast



C++:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
   int breite, hoehe;
   string str;
   istringstream istr;
  
   breite = 0;
  
   while (breite == 0)
   {
      cout  << "Zahl fuer Breite : " << endl;
      cin >> str;
      istr.str(str);
      istr >> breite;
      if (breite < 6 || breite > 24)
         breite = 0;
      istr.clear();
   }

   hoehe = 0;
  
   while (hoehe == 0)
   {
      cout  << "Zahl fuer Hoehe : " << endl;
      cin >> str;
      istr.str(str);
      istr >> hoehe;
      if (hoehe < 6 || hoehe > 24)
         hoehe = 0;
      istr.clear();
   }
   cout << "Breite ist " << breite << "  Hoehe ist " << hoehe << endl;
    // Hoffe das ist das ein Anfang für Dich ?
   return 0;
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.06.2006, 21:45 Uhr
~Matthaei
Gast


Hallo Ihr!

Also dein Programm ist schon recht cool, aber wenn ich das bei mir in den Quelltext einbinde, bekomme ich folgende Fehlermeldung:

CProgramme\Microsoft Visual Studio\MyProjects\Prf4\test.cpp(61) : error C2679: Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::alloc


Was is nun Kaputt?
Kann mir das vielleicht jemand liebenswerterweise in mein Programm einbinden, ich bin hier echt schon seit stunden bei und anscheinend zu blöd dazu *resignier**mitnervenamende*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.06.2006, 22:18 Uhr
~gast
Gast


Hört sich so an als hättest du ne Header-Datei nicht eingebunden
Es könnte fehlen
#include <string>
oder
#include <sstream>
oder
using namespace std;

Poste notfalls dein Programm.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.06.2006, 22:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi klingt nach altem visual studio

ersetz


C++:
#include <iostream>
#include <string>
#include <sstream>




durch


C++:
#include <iostream.h>
#include <string.h>
#include <sstream.h>



und probiers dann nochmal, ich vermute mal du hast "nur" das Visual Studio 6 und kein neueres, das kennt noch keinen standard bzw diesen noch nicht richtig
--
class God : public ChuckNorris { };

Dieser Post wurde am 06.06.2006 um 22:29 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.06.2006, 22:30 Uhr
~Matthaei
Gast



C++:
#include <iostream.h>
#include <iomanip.h>    //Bibliothek für den Befehl setw(x)
#include<stdlib.h>        //clearbefehl
#include <string>        //Abfangen von Buchstaben
#include <sstream>
using namespace std;  


void main()
{

    int hoehe,breite,wiederholen;
    char weiter, spitze;
    int x,i,weite;
    bool Fehler;



    do{
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        x=35;        //Mitte der Spitze
        weite=2;    //Weite des Dreiecks

    //allgemeine Initialisierung der Werte

        hoehe=0;    
        breite=0;
        wiederholen=0;
        weiter=0;
        spitze=0;
        i=0;



    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    system("cls"); // Säubern des Bildschirms

    cout<<endl;
    cout<<"\t  ********************************************"<<endl;
    cout<<"\t\tPruefungsleistung 4 - Aufgabe 4"<<endl<<endl;
    cout<<"\t  Die Darstellung eines symmetrischen Dreiecks"<<endl;
    cout<<"\t  ********************************************"<<endl<<endl;

       string str;
   istringstream istr;
  
   breite = 0;
  
   while (breite == 0)
   {
      cout  << "Zahl fuer Breite : " << endl;
      cin >> str;
      istr.str(str);
      istr >> breite;
      if (breite < 6 || breite > 24)
         breite = 0;
      istr.clear();
   }

   hoehe = 0;
  
   while (hoehe == 0)
   {
      cout  << "Zahl fuer Hoehe : " << endl;
      cin >> str;
      istr.str(str);
      istr >> hoehe;
      if (hoehe < 6 || hoehe > 24)
         hoehe = 0;
      istr.clear();
   }
   cout << "Breite ist " << breite << "  Hoehe ist " << hoehe << endl;
    // Hoffe das ist das ein Anfang für Dich ?
   return 0;
}


        cout<<"Wie soll das Dreieck dargestellt werden?"<<endl<<endl;
        cout<<"\t (1) = mit der Spitze nach oben  (2) = mit der Spitze nach unten";
        cout<<endl<<endl;
        cout<<"Ihre Wahl:  ";
        cin>>spitze;


        system("cls"); // Säubern des Bildschirms
        cout<<endl<<endl;

        switch (spitze)
        {
            case '1':
                {
                        cout<<setw(x);                        //Ausgabe der Spitze
                        cout<<char(15)<<endl;
                        x=x--;                                //Abzug von x damit die Darstellung der Schärge gewährleistet ist

                    for (i=3;i<=hoehe; i++)                // i ist die Laufvariable der "for Schleife"
                    {
                        cout<<setw(x);
                        cout<<char(06)<<setw(weite)<<char(06)<<endl;
                        x--;                                //Abzug von x
                        weite=weite+2;
                    }

                    cout<<setw(x);                            //aktuelles x für die untere Darstellung des Dreiecks

                    for (i=0; i<breite; i++)
                    {
                        cout<<char(06);
                        cout<<char(00);                        //Ascii für Leerzeichen
                    }
                    cout<<endl<<endl;
                }    break;

            case '2':
                {
                    x=x-breite;                                //Berechnung der oberen Darstellung des Dreiecks
                    cout<<setw(x);                            //aktuelles x für die obere Darstellung des Dreiecks
                    
                    for(i=+1; i<=breite; i++)
                    {
                        cout<<char(06);
                        cout<<char(00);                        //Ascii für Leerzeichen
                    }

                    cout<<endl;
                    x++;

                    for (i=3; i<=hoehe; i++)
                    {
                        cout<<setw(x);
                        cout<<char(06)<<setw((breite*2)-weite-2)<<char(06)<<endl;
                        x++;
                        breite--;                            
                    }

                    cout<<setw(34)<<char(15)<<endl;
                    
                }    break;
            default:
                {
                    cout<<"Falschen Wert fuer die Spitze eingegeben"<<endl<<endl;

                }


    cout<<"Moechten sie nochmal ein Dreieck anzeigen lassen?"<<endl<<endl;
    cout<<"Druecken sie (1) fuer Ja [Anykey] fuer Nein";
    cout<<endl;
    cin>>wiederholen;
        }
    while(wiederholen==1);

    cout<<endl<<endl<<endl<<endl;
    cout<<"Vielen Dank (Herr Olthoff) fuer die Nutzung dieses Programms"<<endl<<endl;

}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.06.2006, 23:08 Uhr
~gast
Gast


Habs zum Laufen gebracht
Benutze Visual Studio 2005
Was ich ändern musste waren Sachen wie void main(), ein Klammer fehlte
stdafx.h zugefügt wegen VS 2005
die Header alle in Standard C++

C++:
// Math.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <iostream>
#include <iomanip>    //Bibliothek für den Befehl setw(x)
#include<stdlib.h>        //clearbefehl
#include <string>        //Abfangen von Buchstaben
#include <sstream>
using namespace std;  


int main()
{

    int hoehe,breite,wiederholen;
    char weiter, spitze;
    int x,i,weite;
    bool Fehler;



    do{
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        x=35;        //Mitte der Spitze
        weite=2;    //Weite des Dreiecks

    //allgemeine Initialisierung der Werte

        hoehe=0;    
        breite=0;
        wiederholen=0;
        weiter=0;
        spitze=0;
        i=0;



    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    system("cls"); // Säubern des Bildschirms

    cout<<endl;
    cout<<"\t  ********************************************"<<endl;
    cout<<"\t\tPruefungsleistung 4 - Aufgabe 4"<<endl<<endl;
    cout<<"\t  Die Darstellung eines symmetrischen Dreiecks"<<endl;
    cout<<"\t  ********************************************"<<endl<<endl;

       string str;
   istringstream istr;
  
   breite = 0;
  
   while (breite == 0)
   {
      cout  << "Zahl fuer Breite : " << endl;
      cin >> str;
      istr.str(str);
      istr >> breite;
      if (breite < 6 || breite > 24)
         breite = 0;
      istr.clear();
   }

   hoehe = 0;
  
   while (hoehe == 0)
   {
      cout  << "Zahl fuer Hoehe : " << endl;
      cin >> str;
      istr.str(str);
      istr >> hoehe;
      if (hoehe < 6 || hoehe > 24)
         hoehe = 0;
      istr.clear();
   }
   cout << "Breite ist " << breite << "  Hoehe ist " << hoehe << endl;
    // Hoffe das ist das ein Anfang für Dich ?
//   return 0;
//}      

        cout<<"Wie soll das Dreieck dargestellt werden?"<<endl<<endl;
        cout<<"\t (1) = mit der Spitze nach oben  (2) = mit der Spitze nach unten";
        cout<<endl<<endl;
        cout<<"Ihre Wahl:  ";
        cin>>spitze;


        system("cls"); // Säubern des Bildschirms
        cout<<endl<<endl;

        switch (spitze)
        {
            case '1':
                {
                        cout<<setw(x);                        //Ausgabe der Spitze
                        cout<<char(15)<<endl;
                        x=x--;                                //Abzug von x damit die Darstellung der Schärge gewährleistet ist

                    for (i=3;i<=hoehe; i++)                // i ist die Laufvariable der "for Schleife"
                    {
                        cout<<setw(x);
                        cout<<char(06)<<setw(weite)<<char(06)<<endl;
                        x--;                                //Abzug von x
                        weite=weite+2;
                    }

                    cout<<setw(x);                            //aktuelles x für die untere Darstellung des Dreiecks

                    for (i=0; i<breite; i++)
                    {
                        cout<<char(06);
                        cout<<char(00);                        //Ascii für Leerzeichen
                    }
                    cout<<endl<<endl;
                }    break;

            case '2':
                {
                    x=x-breite;                                //Berechnung der oberen Darstellung des Dreiecks
                    cout<<setw(x);                            //aktuelles x für die obere Darstellung des Dreiecks
                    
                    for(i=+1; i<=breite; i++)
                    {
                        cout<<char(06);
                        cout<<char(00);                        //Ascii für Leerzeichen
                    }

                    cout<<endl;
                    x++;

                    for (i=3; i<=hoehe; i++)
                    {
                        cout<<setw(x);
                        cout<<char(06)<<setw((breite*2)-weite-2)<<char(06)<<endl;
                        x++;
                        breite--;                            
                    }

                    cout<<setw(34)<<char(15)<<endl;
                    
                }    break;
            default:
                {
                    cout<<"Falschen Wert fuer die Spitze eingegeben"<<endl<<endl;

                }
        }

    cout<<"Moechten sie nochmal ein Dreieck anzeigen lassen?"<<endl<<endl;
    cout<<"Druecken sie (1) fuer Ja [Anykey] fuer Nein";
    cout<<endl;
    cin>>wiederholen;
        }
    while(wiederholen==1);

    cout<<endl<<endl<<endl<<endl;
    cout<<"Vielen Dank (Herr Olthoff) fuer die Nutzung dieses Programms"<<endl<<endl;

}
                                



mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: