C++ kläglicher Versuch Funktionen zu nutzen^^ :(

F!r3f0x

Lieutenant
Dabei seit
Dez. 2006
Beiträge
755
Hi,

also manche werden bestimmt hier lachen über das was ich mache, aber ich muss sagen, dass ich ein C++ Anfänger bin und versuche mich da grade reinzuarbeiten.
Hab heute den Teil über Funktionen gelesen und nun versuche ich nen paar Dinge zu machen.

Ich wollte eigentlich nur zwei Zahlen addieren, indem ich a und b einlese und dann über eine Funktion namens addieren das ausrechnen lasse. Der Wert sollte dann zurückgegeben werden und mittels cout einfach auf der Konsole erscheinen.

Ich glaub ich hab da aber nen ziemlich großen Unfug geschrieben :(
Hoffe ihr könnt mir sagen was ich da falsch habe muss das ja üben :evillol::evillol:

EDIT: also Rechnen tut er nur krieg ich bei 2 + 3 als Ergebnis 2088810195. Da stimmt also irgendwie was nicht :(

Code:
#include <iostream>
using namespace std;

//Funktion-Deklaration
int addieren();

int main()
{
    int a, b, erg, ergebnis;
    
    cout << "Bitte geben sie die erste Zahl ein: " << endl;
    cin >> a;
    
    cout << "Bitte geben sie die zweite Zahl ein: " << endl;
    cin >> b;
    
    int addieren();
    
    cout << "Das Ergebnis lautet: " << ergebnis << endl;    
    
    char f;
    cin >> f;
    return 0;
}

//Funktion-Definition
int addieren ()
{     
      int a, b, erg, ergebnis;
      erg = a + b;
      return ergebnis;
}
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
Code:
#include <iostream>
using namespace std;

//Funktions-Deklaration
int addieren (int a, int b);

int main()
{
    int a, b, erg, ergebnis;
    
    cout << "Bitte geben sie die erste Zahl ein: " << endl;
    cin >> a;
    
    cout << "Bitte geben sie die zweite Zahl ein: " << endl;
    cin >> b;
    
    int addieren(int a, int b);
    
    cout << "Das Ergebnis lautet: " << ergebnis << endl;    
    
    char f;
    cin >> f;
    return 0;
}

//Funktions-Definition
int addieren (int a, int b)
{     
      a + b;
      return a+b;

}
das geht doch so auch nicht.
wenn du keine variablen in die funktion uebergibst und neue a und b erstellst, wie soll die funktion dann mit vernuenftigen zahlen rechnen?
irgendwie einleuchtend.
Ich tüfftel ma nochn bisschen rum. Vielleicht kommt ja noch ne Antwort^^
 

Velines

Lt. Junior Grade
Dabei seit
Juli 2008
Beiträge
395
Schieb einfach bei Deinem ersten Versuch die Variablendeklaration raus aus der main() in den globalen Teil (und lösch die Deklaration + return in der Funktion), dann sollte es gehen.
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
Ich will ja keine globale Variablen haben :).
Das macht sich nicht gut in größeren Programmen, weil man schnell die Übersicht verliert.

Darum wollte ich es mir von Anfang an angewöhnen, mit lokalen Variablen zu arbeiten.
 

Velines

Lt. Junior Grade
Dabei seit
Juli 2008
Beiträge
395
Achso. Dann kannst Du der addieren-Funktion (die dann immer noch ein void bleibt) auch einfach Referenzen auf a, b und ergebnis übergeben. Wenn Dir das zu fortgeschritten ist, dann einfach in der main
Code:
ergebnis=addieren(a, b)
wobei die addiere() so wie die von tarsonis sein sollte.
Das int vor dem Funktionsaufruf kannst Du Dir sparen, das ist nur bei der Deklaration wichtig.
 

Maysi2k

Captain
Dabei seit
Sep. 2006
Beiträge
3.418
Der code müsste Funtzen

#include <iostream>

int main()
{
int a, b, ergebnis;

cout << "Bitte geben sie die erste Zahl ein: " << endl;
cin >> a;

cout << "Bitte geben sie die zweite Zahl ein: " << endl;
cin >> b;

ergebnis=int addieren(int a, int b);

cout << "Das Ergebnis lautet: " << ergebnis << endl;
Pause;
}

//Funktion-Definition
int addieren (int a, int b)
{
int erg;
erg = a + b;
return erg;
}
 
Zuletzt bearbeitet:

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
Statt
Code:
ergebnis=int addieren(int a, int b);
würde ich jetzt einfach
Code:
ergebnis= addieren(a, b);
schreiben.

Die Ergebnisfunktion kann man auch einfach als
Code:
int addieren (int a, int b)
{ 
return (a + b);
}
schreiben.

Alternativ dazu kannst du auch einen Pointer übergeben und so die übergebenen Variable innerhalb der Funktion ändern. Wird dir aber vermutlich für den Anfang zu kompliziert sein und richtig schön für die Übersicht im Programm ists eigtl. ned zumal Pointer immer ne schöne Fehlerquelle sind ;) Später wirst du Pointer aber sicherlich brauchen...
Code:
...
addieren(a, b, &ergebnis);
...

//Funktion-Definition
void addieren (int a, int b, int *ergebnis)
{ 
*ergebnis= a + b;
}
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
@hostile
danke für die Links ich hab da um die Uhrzeit schon geschlafen^^

@topic
Code:
#include <iostream>
using namespace std;

int addieren (int a, int erg);

int main()
{
    int a = 10, b = 10;
    int erg;
    int w;
    
    addieren(a, erg);
    
    char f;
    cin >> f;
    return 0;
}

//Funktion-Definition
int addieren (int a, int erg)
{   
    a = 5;
    erg = a + 10;
    cout << "A: " << erg << endl;
    return erg;
}
Der Fehler den ich wohl gemacht habe war, das wenn ich die Funktion aufgerufen habe zwar die Variablen a und b hatte, aber diese hatten doch garkeinen Wert. D.h. ich habe versucht 0 und 0 zu addieren. Hätte eigtl. klappen sollen aber ich bin mir sicher da war mehr als nur 1 Fehler^^.

Jetzt hab ich es so gemacht das ich in der Funktion ne Addition durchführe und sogar das richtige Ergebnis bekomme.
Nur habe ich eine Frage war es nicht so das ich mit return das Ergebnis der Funktion in die Main Funktion zurückgebe? Ich würde jetz gern mit dem Wert 15 in Main weiter arbeiten.
 

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
Nichts für ungut aber deine Funktion macht überhaupt keinen Sinn, da du zwar Variablen übergibst (a und erg), diese aber überhaupt nicht genutzt werden. Ebenso wird der return-Wert überhaupt nicht genutzt. Wie mans richtig macht wurde doch oben schon geschrieben!

Der Fehler mit den 2088810195 (den du im ersten Post erwähnt hast) lag halt einfach daran, dass in der main-Funktion die Variable ergebnis keinen Wert zugewiesen bekommen hat und somit an dieser Speicherstelle halt irgendein undefinierter Müll gestanden hat der dir da ausgegeben wurde. Ich würde dir dringend empfehlen, ein Tutorial oder ein Buch durchzuarbeiten, denn irgendwie erscheints mir so, als ob du noch überhaupt keinen Plan hast...
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
Ich würde dir dringend empfehlen, ein Tutorial oder ein Buch durchzuarbeiten, denn irgendwie erscheints mir so, als ob du noch überhaupt keinen Plan hast...
Also ich hab hier 2 Bücher
einmal C++ von Helmut Erlenkötter und einma C++ von A bis Z von Jürgen Wolf.
Dann hab ich Video2Brain C++ die 2005 und 2006 sowie ein englischsprachiges Tutorial von Youtube Link. Ich denk mal das sollte mehr als genug sein. Wie gesagt ich habe erst GESTERN mir den Teil für Funktionen durchgelesen. Prinzipiell habe ich verstanden wie sie Funktionieren. Die Syntax einer Funktion habe ich mir auch eingeprägt. Nur das in die Tat umzusetzen ist halt etwas schwierig. Keiner hat auch gesagt das C++ einfach ist. Es sei noch angemerkt das es meine erste Programmiersprache ist mal abgesehen von sowas wie HTML und CSS. Übung macht den Meister und aus meinen eigenen Fehlern kann ich nur lernen, sonst nicht. Und ich werd das solang probiern bis ich es drauf hab, denn die Funktionen gehören zu den Grundlagen und wenn ich die nicht 100%tig sitzen kann ich das ganze eh vergessen.

Nichts für ungut aber deine Funktion macht überhaupt keinen Sinn, da du zwar Variablen übergibst (a und erg), diese aber überhaupt nicht genutzt werden. Ebenso wird der return-Wert überhaupt nicht genutzt. Wie mans richtig macht wurde doch oben schon geschrieben!
Die oben genannten Beispiele lassen sich leider nicht compilieren. Ich versuch es weiterhin selber und schlag in den Büchern und im Internet nach. Werd es schon hinkriegen, denn ohne Fleiß erreicht man im Leben garnichts.
 

Velines

Lt. Junior Grade
Dabei seit
Juli 2008
Beiträge
395
Von HTML/CSS kommend ist C++ natürlich schon ein krasser Umstieg :)
So funzt Dein Code:

Code:
#include <iostream>
using namespace std;

//Funktion-Deklaration
int addieren(int, int);

int main()
{
    int a, b, erg;
    
    cout << "Bitte geben sie die erste Zahl ein: " << endl;
    cin >> a;
    
    cout << "Bitte geben sie die zweite Zahl ein: " << endl;
    cin >> b;
	
    erg =  addieren(a, b);
    
    cout << "Das Ergebnis lautet: " << erg << endl;    
    
/*    char f;
    cin >> f;
    return 0;
*/
}

//Funktion-Definition
int addieren(int a, int b)
{     
	return a + b;
}
Das mit dem char f hab ich mal auskommentiert, das macht ja bislang nichts sinnvolles.
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
doch das char f verhindert, dass sich die Konsole nach dem durchlauf schließt.
Es gibt ja verschiedene Möglichkeiten das zu verhindern.
Es gibt noch System("Pause") aber dann kommt immer unten ne Meldung das man ne Taste drücken soll zum schließen. So find ich es einfach eleganter :)
Werd das Programm mal gleich probiern und sag dir dann obs funzt.

Ja, mein Freund der hat in der Schule Delphi gelernt. Hat sich dann zuhause von Büchern TurboPascal beigebracht und ist auf C++ umgestiegen. Der konnte aber auch HTML und CSS vor Delphi schon.
Mittlerweile versucht er sich QT4 anzueignen........find ich bewundernswert alles aus Büchern und durch kreativität zu lernen :).
Aber er hat mir auch gesagt, dass es nicht leicht sein wird für mich. Wenn ich es wirklich will und am Ball bleibe und es kontinuierlich übe und lerne werd ich erfolg haben. Er hatte auch Schwierigkeiten am Anfang. Ich weiß noch ganz genau, dass er in der Schulzeit bis 3 Uhr abends am Rechner war und versucht hat da sein Quellcode zum laufen zu kriegen. Am Ende stellte sich heraus das er nur ein " * " vergessen hatte -.-^^

EDIT: cool, es funktioniert wirklich :). Vielen Dank^^
Ich werd mal probieren mit dem Wert der zurückgeliefert wird weiter zu arbeiten z.B. das er irgendeine Zahl dazu addiert oder so.
 
Zuletzt bearbeitet:

Velines

Lt. Junior Grade
Dabei seit
Juli 2008
Beiträge
395
doch das char f verhindert, dass sich die Konsole nach dem durchlauf schließt.
Es gibt ja verschiedene Möglichkeiten das zu verhindern.
Es gibt noch System("Pause") aber dann kommt immer unten ne Meldung das man ne Taste drücken soll zum schließen. So find ich es einfach eleganter :)
Werd das Programm mal gleich probiern und sag dir dann obs funzt.
Schon klar _was_ es macht, nur der Sinn dessen ist mir nicht klar. Ist aber auch egal, ist ja schließlich Dein Programm :p
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
naja der Sinn liegt einzig und allein darin, dass Konsolenfenster offen zu lassen, NACHDEM das Programm einmal durchgelaufen ist.

Wenn ich nen ganz einfach Hello World auf der Konsole ausgebe, dann seh ich die Konsole 1ms lang und weg is es. Solange ich aber nich die Taste "f" drücke und bestätige bleibt das Fenster offen und ich kann mir das Resultat ansehen :)

Es ist mir schon klar, dass du weißt _was_ es macht :D
Ich wollts halt nur ma erläutern :D
 

Velines

Lt. Junior Grade
Dabei seit
Juli 2008
Beiträge
395
Achso, da hab ich gar nicht dran gedacht, weil ich die Programme ja direkt aus'm Terminal ausführe ;)
Jetzt ist mir der Sinn auch klar :D
 

F!r3f0x

Lieutenant
Ersteller dieses Themas
Dabei seit
Dez. 2006
Beiträge
755
haha ok alles klar :)
Danke für die Hilfe bin wieder in meinen Büchern stöbeeeern^^
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Mit deinem Computer scheint etwas nicht in Ordnung zu sein.
Denn bei mir kommt mit 2 und 3 das korrekte Ergebnis -1208419376 heraus :(
 
Top