Einzelnen Beitrag anzeigen
Alt 03.10.2004, 00:13   #4 (permalink)
kerri
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard Re: C++ Code - alles falsch?! :(

Ok, ich versuch erstmal die Fehler im Code anzumerken:

Code:
#include <iostream.h>   // besser: #include <iostream>
                              // hier fehlt eigentlich ein using namespace std;


int  a = 0;
int  b = 0;
char c = 0;              // ist ein character, besser mit 'N' initialisieren

               // warum machst hier ne globale initialisierung? Die Variablen lieber mit in die main packen

void main(void)                             // besser: int main (void)
{
	cout << "Ein kleines Zahlenvergleichsprogramm." << endl;
	cout << " " << endl;
	cout << "Bitte geben sie jetzt die erste Zahl an: " << endl;
	cin >> a;
	cout << "Bitte geben sie jetzt die zweite Zahl an: " << endl;
	cin >> b;
	cout << "Die erste Zahl lautet: " << a << endl;
	cout << "Die zweite Zahl lautet: " << b << endl;
	cout << "Sind diese Eingaben korrekt?" << endl;
	cout << "Geben sie 'J' für Ja ein und 'N' fuer Nein." <<endl; 
	cin >> c;

	if (c==J)                    // Charaktervergleich!! J wird hier als undeklarierte Variable gesehen (da meckert der compiler), richtig waere: if (c=='J') 
	{
		if (a>b)             // hier ist a>b  => korrekt
		{
		cout << a;
			cout << " ist groesser als ";
			cout << b;
		}
		else                   // hier ist a<b ODER a=b
		{
			cout << a;                     // erstmal a < b ausgeben???? hoeh???
			cout << " ist kleiner als ";
			cout << b;
			if (a==b)                      // und danach testen, ob nicht doch a=b??
			{
				cout << a;
				cout << ist genau so gross wie ";  // hier fehlen die Anfuehrungszeichen "
				cout << b;
			}                     // if(a=b) ende
		}                             // else ende

                                             // hier fehlt das if (c==J) ende  }
	else
	{
		cout << "Ein kleines Zahlenvergleichsprogramm." << endl;
	cout << " " << endl;
	cout << "Bitte geben sie jetzt die erste Zahl an: " << endl;
	cin >> a;
	cout << "Bitte geben sie jetzt die zweite Zahl an: "; << endl;   // erst ein ; und dann noch << endl; ?
	cin >> b;
	cout << "Die erste Zahl lautet: " << a << endl;
	cout << "Die zweite Zahl lautet: " << b << endl;
	cout << "Sind diese Eingaben korrekt?" << endl;
	cout << "Geben sie 'J' für Ja ein und 'N' fuer Nein." <<endl; 
	cin >> c;
	if (c==J)                    // hier muss J wieder ein character sein: 'J'
       {
		if (a>b)                        // hier ist a > b
		{
			cout << a;
			cout << " ist groesser als ";
			cout << b;
		} 
		else                             // hier ist a < b oder a = b
 		{
			cout << a;                         // erstmal ausgeben, das a < b ?????
			cout << " ist kleiner als ";
			cout << b;
			if (a==b)                 // und dann nochmal testen, ob a = b?????
			{ 
				cout << a;
				cout << ist genau so gross wie ";          // Anfuehrugsstriche net immer vergesen!
				cout << b;
			}
		}
	}
	}  // hier ist irgendeine der klammern zuviel (die vom if oben?)
	}
                  /// hier sollte stehen: return 0;
}
Das Problem an dem Code ist auch, das das Programm nach der 2. falschen Eingabe nochmal nachfragt, ob die Eingaben nun richtig sind oder nicht, und bei N einfach abbricht.
Hier solltest besser mit ner Schleife arbeiten, am besten ne do{ }while(); schleife.
also etwa so:
Code:
int main()
{
  variablen initialisieren;
 
  do{ 
   	nach Zahlen fragen;
   	nach Korrektheit fragen;
  }while(nicht korrekt);

  Ergebnis ausgeben;
  
  return 0;
}
oder als Code:

Code:
#include <iostream>
using namespace std;

int main(void)
{
    int  a = 0;                   //erste zahl
    int  b = 0;                   //zweite zahl
    char c = 'N';                 //Abfrageergebnis

    /////////////////////// EINGABE der Daten
    do{

		cout << "Ein kleines Zahlenvergleichsprogramm." << endl;
		cout << " " << endl;
		cout << "Bitte geben sie jetzt die erste Zahl an: " << endl;
		cin >> a;                               // eingabe der ersten Zahl

		cout << "Bitte geben sie jetzt die zweite Zahl an: " << endl;
		cin >> b;                               // eingabe der zweiten Zahl

		cout << "Die erste Zahl lautet: " << a << endl;
		cout << "Die zweite Zahl lautet: " << b << endl;
		cout << "Sind diese Eingaben korrekt?" << endl;
		cout << "Geben sie 'J' für Ja ein und 'N' fuer Nein." <<endl; 
		cin >> c;                              // abfrage auf korrektheit

    }while ( c == 'N');  // solange Daten nicht korrekt, erneut fragen
 

    //////Jetzt ist sicher, das die Zahlen stimmen - AUSGABE
    if (a > b)                      // teste auf a > b
    {
		cout << a << " ist groesser als " << b;
    }
    else if (a < b)               // teste auf a < b
    {
		cout << a << " ist kleiner als " << b;
    }
    else                              // es muss a = b sein
    {
		cout << a << " ist genau so gross wie " << b;
    }

    cout << " " << endl;            // damits am ende schoen aussieht

   return 0;
}

Ein paar kleine Tips noch: Gewoehn Dir an, Kommentare in den Text zu schreiben. also z.B. welche Klammer welches if oder else beendet. Das hilft ungemein bei der Fehlersuche.
Dann: Versuch, auf die Fehlermeldungen des Compilers zu reagieren. also wenn er sich beschwert, das 'ist' keine Variable ist und noch Zeile 35 dazu angibt ("c.cpp:35: error: `ist' undeclared (first use this function)") , solltest dir die Zeile 35 und eventuell die drueber nochmal genauer angucken. Genauso die Sache mit dem J. J an sich wird als Variable gesehen, wogegen 'J' ein Character ist und "J" ein String. (zumindest in C )
Dann nochwas: Hast Du nen Editor mit Syntax-Highlighting und automatischer Einrueckung? Das hilft auch ungemein.

Gruesse, kerri
kerri ist offline   Mit Zitat antworten