TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen
Registrieren Hilfe Community Downloads

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02.10.2004, 21:06   #1 (permalink)
Der Date Doktor
 
Benutzerbild von Kodak
 

Registriert seit: 09.11.2003
Beiträge: 2.719

Kodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein Lichtblick

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

huhu, hab mir mal nen kleines progg zusammengebastelt, aber irgendwie funzt das alles net... dann könnt ihr mir auch gleich mal erklären, wie diese return funktion hier eingebaut wird. ich möchte nämlich, wenn bei der abfrage N eingegeben wird, das das programm von vorn anfängt.

Code:
#include <iostream.h>

int  a = 0;
int  b = 0;
char c = 0;
void 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)
	{
		if (a>b)
		{
			cout << a;
			cout << " ist groesser als ";
			cout << b;
		}
		else
		{
			cout << a;
			cout << " ist kleiner als ";
			cout << b;
			if (a==b)
			{
				cout << a;
				cout << ist genau so gross wie ";
				cout << b;
			}
		}
	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;
	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)
	{
		if (a>b)
		{
			cout << a;
			cout << " ist groesser als ";
			cout << b;
		}
		else
		{
			cout << a;
			cout << " ist kleiner als ";
			cout << b;
			if (a==b)
			{
				cout << a;
				cout << ist genau so gross wie ";
				cout << b;
			}
		}
	}
	}
	}
}
Will Smith for President!
Kodak ist offline   Mit Zitat antworten
Alt 02.10.2004, 22:21   #2 (permalink)
Extrem Tweaker
 

Registriert seit: 19.01.2004
Beiträge: 2.660

TwinView ist ein sehr geschätzer MenschTwinView ist ein sehr geschätzer MenschTwinView ist ein sehr geschätzer Mensch

Standard

Erstmal: ich lerne auch gerade C++ und bin warscheinlich noch noobiger als du, also bitte net böse sein wenn was net stimmt. Okay ich hab das jetzt mal nach eigenem ermessen abgeändert und dann sieht das so aus.
Code:
#include <iostream>
using namespace std;

int main() {
    
    int a;
    int b;
        
        cout << "\nEin kleines Zahlenvergleichsprogramm";
        cout << "\n\nBitte geben sie jetzt die erste Zahl an: ";
        cin >> a;
        cout << "\nBitte geben sie jetzt die zweite Zahl an: ";
        cin >> b;
        cout << "\nDie erste Zahl lautet:" << " " << a;
        cout << "\nDie zweite Zahl lautet:" << " " << b;
        cout << "\nSind diese Eingaben korrekt?";
        cout << "\nGeben sie 'J' fuer Ja ein und 'N' fuer Nein."; // muss jemand anderes lösen
        cout << "\n\n";
        
                        
    
    
if (a>b) {
        cout << " " << a << " ist groesser als" << " " << b;
}

        
        
if (a<b) {
        cout << " " << a << " ist kleiner als" << " " << b;
}



if (a=b) {
        cout << " " << a << " ist genau so gross wie" << " " << b;
}


    return 0;
}
So bekomm ichs zumindest kompiliert. Das mit dem "Ja/Nein" muss mal jemand anderes lösen.
TwinView ist offline   Mit Zitat antworten
Alt 02.10.2004, 23:57   #3 (permalink)
Polsterwaffenkampfsportle r
 
Benutzerbild von tele
 

Registriert seit: 29.10.2003
Beiträge: 14.561

tele hat eine strahlende Zukunft
tele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunft

Standard

while ( a != 'N')
{
cin >> c;
....

}
tele ist offline   Mit Zitat antworten
Alt 03.10.2004, 00:13   #4 (permalink)
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
Alt 03.10.2004, 11:00   #5 (permalink)
Der Date Doktor
 
Benutzerbild von Kodak
 

Registriert seit: 09.11.2003
Beiträge: 2.719

Kodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein Lichtblick

Standard

huhu,
wo ist denn der unterschwied zwischen <iostream> und <iostream.h> ?
und wozu braucht man dieses "using namespace std;" ?

und die sache mit dem return 0; hab ich auch noch nicht verstanden. an welche stelle kehrt er denn mit dem return befehl zurück?
Kodak ist offline   Mit Zitat antworten
Alt 03.10.2004, 11:02   #6 (permalink)
Hardware Freak
 
Benutzerbild von Live
 

Registriert seit: 10.04.2002
Beiträge: 6.256

Live sorgt für eine eindrucksvolle AtmosphäreLive sorgt für eine eindrucksvolle AtmosphäreLive sorgt für eine eindrucksvolle Atmosphäre

Standard

Bei C++ kann man sich das .h sparen, bei C war es noch nötig.
Zu den anderen - kurz gesagt, beides gehört zum sauberen programmieren und sorgen dafür, dass praktisch jeder Compiler das schluckt.
Live ist offline   Mit Zitat antworten
Alt 03.10.2004, 12:00   #7 (permalink)
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

Ich habe ja die main nicht als void deklariert, sondern als int main() das heisst, das main eine funktion mit Rueckgabedatentyp int ist, und nicht wie bei Dir, void (=nix). Und das return 0; am Ende als allerletzte Anweisung, teilt dem Betriebssystem mit, das das Programm ohne Fehler durchgelaufen und fertig ist. 0 ist dann der Rueckgabewert (muss, wie oben deklariert, vom Datentyp int sein, was er auch ist.)
Andere Rueckgabewerte kannst du selbst an beliebiger Stelle setzen, und zwar, wenn ein Fehler aufgetreten ist und Du das Programm sofort beenden moechtest. z.B. in Deinem Programm, wenn einer statt J oder N irgendwas anderes eingbt.
Code:
int main()
{
  variablen initialisieren;

  do{
      nach Zahlen fragen;
      nach Korrektheit fragen;

     if (nicht J oder N eingegeben)  
     {
          Ausgabe: Falscher Buchstabe eingegeben!
          return 1;                                              ///// Programm abwuergen bei falscher Eingabe.
     }

  }while(N eingegeben);

  Ergebnis ausgeben;
 
  return 0;
}
Ne allgemeine Regel ist, je Groesser der Rueckgabewert, um so schlimmer der Fehler. Das solltest natuerlich auch irgendwo dokumentieren, welcher Rueckgabewert welchem Fehler entspricht.

Gruesse, kerri
kerri ist offline   Mit Zitat antworten
Alt 03.10.2004, 12:13   #8 (permalink)
Der Date Doktor
 
Benutzerbild von Kodak
 

Registriert seit: 09.11.2003
Beiträge: 2.719

Kodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein Lichtblick

Standard

das heisst, wenn ich jetzt oben int main (z) deklariere, dann kann ich weiter unten irgendwo return z; eingeben und dann bricht das programm an der stelle ab? oder fängt das dann von vorne an?
Kodak ist offline   Mit Zitat antworten
Alt 03.10.2004, 12:30   #9 (permalink)
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

noe, das was in den klammern steht, ist das, was vom betriebssystem (resp. vom Benutzer) an die Funktion beim starten uebergeben wird. das was der Funktion uebergeben wird, hat absolut nichts mit dem zu tun, was die Funktion selbst zurueckgibt. Bei return wird die Funktion einfach beendet.

Genauso kannst Du Dir deine eigenen Funktionen selber basteln, da wirds vielleicht klarer, was es mit diesen Rueckgabewerten so auf sich hat. Mal n einfaches Beispiel zu rueckgabewerten:

Code:
int main(void)
{
  int a;
  int b;
  int c;
  int ergebnis1;
  int ergebnis2;

  nach werten fuer a,b,c fragen;

  ergebnis1=summenberechnung(a,b);      // hier wird die Summe aus a und b gerechnet
  ergebnis2=summenberechnung(a,c);      // hier wird die Summe aus b und c berechnet

  ergebnis1 und ergebnis2 ausgeben;

  return 0;
}



int summenberechnung(int summand1, int summand2)
{
  int summe;

  summe=summand1+summand2;

  return summe;
}
Der Wert der funktion summenberechnung am ende ist jeweils summe.

Dabei wird aber nur die Funktion beendet, in der das return auftaucht, nicht das ganze Programm. Nur, wenn return in main auftaucht beendet das ganze Programm.

meine summenberechnung-funktion nimmt 2 werte vom datentyp int an (int summand1, int summand2) und gibt einen wert vom datentyp int zurueck an die main funktion (return summe.
kerri ist offline   Mit Zitat antworten
Alt 03.10.2004, 12:59   #10 (permalink)
Polsterwaffenkampfsportle r
 
Benutzerbild von tele
 

Registriert seit: 29.10.2003
Beiträge: 14.561

tele hat eine strahlende Zukunft
tele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunft

Standard

um es mal so zu machen:

du willst, dass dein programm mit parametern aufgerufen wird, z.b.

meinrechner.exe /typ:addition /anzahl:5

dann kannst du wenn du die main mit paramtern füllst

int main( int argc, char *argv[])
{

return 0;
}


kannste mit arc dieanzahl an paramtern rausbekommen, und in der pointer-liste-array-wasauchimmer stehen dann die paramter selbst drin
tele ist offline   Mit Zitat antworten
Alt 04.10.2004, 22:46   #11 (permalink)
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

Danke an Twin View, telepornos, Live und kerri fuer Eure Hilfe, hat mich zumindest ein kleines Stueckchen weitergebracht. Danke das Ihr Euch fuer mein Problem Zeit genommen habt und das Ihr Euch den Ars*h aufgerissen habt, um mir was zu erklaeren. Nochmals vielen Dank.

und:
Zitat:
Zitat von kodak
[...]dann könnt ihr mir auch gleich mal erklären[...]




Ja, ich weiss, bitte und danke sind in letzter Zeit recht selten verwendete Worte, das find ich extrem schade

Gruesse, kerri

PS.: Ich frage mich momentan ernsthaft, warum ich so bloed bin und ueberhaupt noch auf solche (im nachhinein betrachtet doch recht unfreundlichen) Beitraege antworte.
kerri ist offline   Mit Zitat antworten
Alt 04.10.2004, 23:30   #12 (permalink)
Polsterwaffenkampfsportle r
 
Benutzerbild von tele
 

Registriert seit: 29.10.2003
Beiträge: 14.561

tele hat eine strahlende Zukunft
tele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunft

Standard

*die kleine kerri tröst*

es sind ja noch wilde jugendliche die wissen noch nix von guten umfangsformen



so wie ich



nee mal ernsthaft - seh das dochmal so: da beansprucht jemand deinen überaus göttlichen skill und du kannst den so richtig unter beweis stellen - das ist z.b. mir dank genug (aber nur manchmal :P)

btw.

kodak: vielleicht kannste die letzte PM mal publizieren, wäre ganz interessant für andere c-anfänger
tele ist offline   Mit Zitat antworten
Alt 05.10.2004, 14:54   #13 (permalink)
Der Date Doktor
 
Benutzerbild von Kodak
 

Registriert seit: 09.11.2003
Beiträge: 2.719

Kodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein LichtblickKodak ist ein Lichtblick

Standard

och kerri

der beitrag kommt vielleicht unfreundlich rüber, das heisst aber noch lange nicht das ich unfreundlich bin

ausserdem war ich noch gar net fertig damit mein code so zu richten wie du das beschrieben hast
aber das mit dem return hab ich wohl jetz so einigermaßen verstanden.. muss da nochmal n bissl mit rumexperementieren

danke kerri


@tele

du meinst diese pn
ich glaub das mit dem return hab ich wohl jetz so einigermaßen verstanden.. muss da nochmal n bissl mit rumexperementieren
Zitat:
der return befehl gibt ab welche variable aus ner funktion returned werden soll (to return = zurückliefern)

der returnwert ist vom typ immer gleich dem typ der funktion, man kann sagen, dass die funktion einen typ hat und der return wert diesen wert repräsentiert

verwirrend ? okay hier ein bsp:

du deklarierst eine funktion addiere() mit dem typ in (int = integer, ganze zahlen)

int addiere()
{

}

da diese funktion jetzt keinen null-typ (=void) hat (achtung null ist hier als kein wert und nichzt als numerischer zahlenwert zu verstehen), muss ein rückgabewert vom typ der funktion erfolgen, welcher ist klar, der mit dem die funktion deklariert wurde, hier int


ergo wenn ich schreibe

int addiere()
{
int a=1;
int b=2;
int c;

c=a+b;

return c;
}

dann liefert mir die funktion das ergebnis von 1+2 zurück

etwas praktischer:

ich deklariere eine funktion addiere(int a, int b) welche das ergebnis der beiden parameter a und b zurückliefert.

int addiere(int a, int b)
{
int c;

c=a+b;

return c;
}

wenn ich jetzt diese funktion in der main aufrufe, kann ich den rückgabewert der funktion weiter verwenden:

int main()
{
int a_main=1;
int b_main=2;
int c_main;

c_main=addiere(a_main, b_main);

printf("Das ergebnis von a und b ist: %i ", c_main);


return 0;
}
Kodak ist offline   Mit Zitat antworten
Antwort

Stichworte
code, falsch


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
IFrame?! Code? Thetweaker06 Programmiersprachen 1 29.03.2006 15:40
Ip Code?? mokus Programmiersprachen 1 28.01.2006 19:53
Code Creature und DX9 Gast Benchmarks 4 08.01.2003 19:00
USB Fehler Code 10 Gast Windows & Programme 3 06.01.2003 23:46


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved