Funktion mit Rückgabewert in C++

Morten

Neues Mitglied
Hallo liebe Community,

ich habe gerade angefangen mit C++ zu programmieren, wir haben die folgende Aufgabe erhalten: Wir sollen in einem Programm die Variable ergebnis nicht mehr als globale Variable definieren, sondern als lokale Variable. Das Programm soll laufen und es soll das Ergebnis und die Rechnung ausgegeben werden. Wir sollen erst einmal bei der switch-case-Anweisung nur mit der Funktion addiere () arbeiten, um das Arbeiten der Funktionen mit Rückgabewert zu üben und zu verstehen.
Die Rechnung und die Ausgabe kann ich ja programmieren, bei mir scheitert es nur daran, dass wenn ich das Programm ausführen will, die Variable Op und ergebnis initialisiert werden müssen, also das zeigt der Debugger als Fehler an. Wie man eine Variable initialisiert weiß ich, mein Problem ist nur wie ich das machen kann mit korrektem Ergebnis. Ich kann die lokale Variable Ergebnis ja nicht auf 0 setzen, da sonst als Ergebnis 0 rauskommt.
Kann mir hierbei jemand helfen?

Mit freundlichen Grüßen aus Niedersachsen
Morten
C++:
// rechnen_return.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.
//
#include <conio.h>
#include <iomanip>
#include <iostream>
using namespace std;

void eingabe(void);
double addiere(void);
void ausgabe(void);
double Op1, Op2;
char Op, wahl; // Nach void Deklaration der globalen Variablen
int main()     // nach Deklaration folgt Hauptprogramm main ()
{

  double endergebnis;

  do {
    cout << fixed << setprecision(2);

    eingabe();
    switch (Op)

    {

    case '+':
      endergebnis = addiere(); // hier gleiche Variable wie in Rechnung in Funktion double addiere (void); erlaubt??
      break;

    default:
      cout << endl << endl << "Unerlaubter Operator";
    }

    cout << endl << endl << "Nochmal? (j/n) ";
    cin >> wahl;
  } while (wahl == 'j');
  return 0;
}
void eingabe(void) {
  system("cls");
  cout << "T a s c h e n r e c h n e r" << endl;
  cout << "===========================" << endl << endl;
  cout << "Geben Sie + , -, *, / als Operatoren ein!" << endl << endl;
  cout << "Operator  : ";
  cin >> Op;
  cout << "1. Zahl   : ";
  cin >> Op1;
  cout << "2. Zahl   : ";
  cin >> Op2;
  return;
}

double addiere(void) {
  double endergebnis;
  endergebnis = Op1 + Op2;

  return endergebnis;
}

void ausgabe(void) {
  double endergebnis, Op;

  cout << Op1 << Op << Op2 << "=" << endergebnis;

  return;
}
 
Zuletzt bearbeitet:

BAGZZlash

Mitglied
Bei der Deklaration des Funktionsprototypen void eingabe(void); (und auch dann bei der eigentlichen Funktion selbst), ist das erste void der Typ, der durch die Funktion zurückgegeben wird. Ist es sinnvoll, dass dies "void" ist? Welchen Typ erwartest Du von der Funktion zurück? Das zweite "void" (das in der Klammer) ist der Typ, der der Funktion übergeben wird. Da wird in diesem Fall "void" wohl in Ordnung sein.

Erklär mir mal (oder zumindest Dir selbst) Schritt für Schritt den Programmfluss diese kleinen Programms. Wie funktioniert die Kommunikation der Hauptfunktion mit der aufgerufenen Funktion (Parameterübergabe hin zur Funktion und Rückgabe von der Funktion hin zur aufrufenden Stelle)?

C:
#include <stdio.h>

float ZweiZahlenAddieren(int a, int b);

int main() {
  float Ergebnis;
  int a = 2;
  int b = 3;

  Ergebnis = ZweiZahlenAddieren(a, b);

  printf("Heraus kommt %f.", Ergebnis);

  return (0);
}

float ZweiZahlenAddieren(int a, int b) {
  float LokalesErgebnis;

  LokalesErgebnis = a + b;

  return (LokalesErgebnis);
}

PS: Sorry, das ist C, ich kann kein C++. Macht aber nix.
 

Morten

Neues Mitglied
@BAGZZlash Vielen Dank für deine Anregungen. Habe es jetzt fast geschafft. Die Ausgabe funktioniert noch nicht so ganz (liegt an der Initialisierung der lokalen Variablen gesamtergebnis). Ich guck noch mal, wie ich das lösen kann.
Ein super Forum habt ihr hier, empfehle ich gerne weiter.

Mit freundlichen Grüßen aus Niedersachsen
Morten
 
Zuletzt bearbeitet:
Oben Unten