C++ Rückgabewert stimmt nicht

Gast #4088089
Lesenswert?
• ▲
▼
Hallo Zusammen,

kann mir jemand sagen warum der Rückgabewert der Funktion nicht stimmt? 
Was mache ich hier falsch?
1
#include "stdafx.h"
2
#include "stdlib.h"
3
#include "stdio.h"
4
#include "locale.h"
5

6

7
void eingabeMesswerte(int &anz, double &wert);
8
double ermittleMittelwert(int anz,int mW[]);
9

10
int _tmain(int argc, _TCHAR* argv[])
11
{
12
  int anzahl=0;
13
  int value[100];
14
  double wert;
15
  double mittelWert;
16

17

18
  char c = 'j';
19
  setlocale(LC_ALL,"German");
20
  
21

22
  do
23
  {
24
    system("cls");
25
    printf("Wenn Sie Messwerte eingeben möchten 'a' \n\n");
26
    printf("Wenn Sie Mittelwert erfahren möchten 'b' \n\n");
27
    printf("Wenn Sie das Programm beenden möchten 'n' \n\n");
28
    scanf("%c",&c);
29

30
    
31
  
32
    switch(c)
33
    {
34
      
35
    case('a'):
36
      {
37
        system("cls");
38
        printf("Bitte die Anzahl der Messwerte angeben: ");
39
        scanf("%i",&anzahl);
40
  
41
        eingabeMesswerte(anzahl,wert);
42
        
43
      }
44
    break;
45

46
    case('b'):
47
        
48
        mittelWert=ermittleMittelwert(anzahl,value);
49
        printf("\n\n\tMittelwert: %.2lf\n\n",mittelWert);
50
        system("pause");
51
        
52
    break;
53

54
    case('n'):
55
        return 0;
56
    break;
57
    }
58
    
59
  }
60
  
61
  while(c='j');
62
    
63
}
64

65
void eingabeMesswerte(int &anz, double &wert)
66
{
67

68
  int anzMw[100];
69
  int i;
70
  double messW = 0;
71

72
  for(i=0;i<100;i++)
73
  {
74
    anzMw[i]=i;
75
  }
76
  if(anz > 100)
77
  {
78
    printf("Sie können nur maximal 100 Messwerte aufnehmen.");
79
  }
80

81
  else
82
  {
83
    for(i=0;i<anz;i++)
84
    {
85
      printf("Geben Sie bitte den %i. Messwert ein: ",i+1);
86
      scanf("%lf",&messW);
87
      anzMw[i]=messW;
88

89
    }
90

91
    ermittleMittelwert(anz,anzMw);
92

93
  }
94

95
}
96

97
double ermittleMittelwert(int anz,int mW[])
98
{
99
  int i;
100
  
101
  double gesamt=0;
102
  double mittelWert;
103

104
  for(i=0;i<anz;i++)
105
  {
106
    gesamt = mW[i]+gesamt;
107
  }
108

109
  mittelWert=(gesamt/anz);
110
  return mittelWert;
111
  //printf("Der Mittelwert beträgt %.2lf\n\n", mittelWert);
112

113
}
Danke

Gruß
Malvin
#4088097
Lesenswert?
• ▲
▼
Ich nehme mal an du meinst du die ermittleMittelwert Funktion. Die sieht 
an sich richtig aus. Irgendwie geht es aber mit deinen Variablen ein 
wenig drunter und drüber. Daher kommt wohl nicht das raus was du 
erwartest. Was z.B. soll int value[100] in deiner main Funktion sein? 
Das wird nur von ermittleMittelwert benutzt aber nirgendwo gefüllt. Dann 
gibt ermittleMittelwert natürlich nur quatsch aus. Es gibt aber auch 
noch einen zweiten Aufruf von ermittleMittelwert in deiner 
eingabeMesswerte Funktion. Dort füllst du int anzMw[100] mit double 
Werten die dann natürlich zu int konvertiert werden. Kommt daher 
eventuell was anderes als erwartet raus?
Gast #4088115
Lesenswert?
• ▲
▼
Malvin schrieb:
> kann mir jemand sagen warum der Rückgabewert der Funktion nicht stimmt?

Die Funktion "eingabeMesswerte(int &anz, double &wert)" sieht nach C++ 
aus. Jedenfalls speichert sie die eingegebenen Werte in einer lokalen 
Variable, die geht bei Beendigung der Funktion verloren.

Der Parameter "wert" wird nicht verwendet - vermutlich soll auch 
"eingabeMesswerte" dort den Mittelwert retournieren?
Gast #4088128
Lesenswert?
• ▲
▼
Sebastian V. O. schrieb:
> Dort füllst du int anzMw[100] mit double
> Werten die dann natürlich zu int konvertiert werden.

wie so werden die Werte zu int konvertiert? Hier wird doch nur der 
Messwert an der Speicherstelle gespeichert oder nicht?

Sebastian V. O. schrieb:
> Was z.B. soll int value[100] in deiner main Funktion sein?

Die Funktion "ermittleMittelwert(variable, array)", damit ich den in 
Main aufrufen kann habe ich hier eine leere Array geladen.

Kann das der Fehler sein?
Gast #4088131
Lesenswert?
• ▲
▼
Mitlesa schrieb:
> Deklariere deine Variable so:
> static double mittelWert;
>
> sonst geht der Inhalt beim Rücksprung verloren.

nein, bitte nicht. Auch wenn das Programm damit eventuell funktioniert, 
ist diese Lösung nicht sinnvoll erweiterbar.

Der Ansatz vom Programm ist ja schon richtig, andere haben den Fehler ja 
schon gefunden, es wird einfach das falsche Array verwendet.
Gast #4088138
Lesenswert?
• ▲
▼
Malvin schrieb:
> Hab die Variable als static definiert, trotzdem ist der Rückgabewert
> undefiniert--> -858993460.00

lies dir die anderen Kommentare durch, du hast 2 Array und sie irgendwie 
vertauscht.

Gehe einfach schritt für Schritt im Debugger mal durch, und schau dir 
den Inhalt deiner Variablen an,
#4088167
Lesenswert?
• ▲
▼
Malvin schrieb:
> Sebastian V. O. schrieb:
>> Dort füllst du int anzMw[100] mit double
>> Werten die dann natürlich zu int konvertiert werden.
>
> wie so werden die Werte zu int konvertiert? Hier wird doch nur der
> Messwert an der Speicherstelle gespeichert oder nicht?

Nochmal der relevante Code:
1
int anzMw[100];
2
double messW = 0;
3
...
4
for(i=0;i<anz;i++)
5
{
6
  printf("Geben Sie bitte den %i. Messwert ein: ",i+1);
7
  scanf("%lf",&messW);
8
  anzMw[i]=messW;
9

10
}

Du lässt den Benutzer hier eine Zahl eintippen und speicherst diese in 
messW. messW ist ein double also kann man auch Zahlen mit 
Nachkommastellen eingeben. Wenn du diese aber mit anzMw[i]=messW in 
einem Array aus ints speicherst werden die Nachkommastellen einfach 
verworfen. Wenn du die double Werte behalten willst musst du schon ein 
double anzMw[100] Array erstellen. Gleiches für die ermittleMittelwert 
Funktion die auch ein Array von ints erwartet.
Gast #4088169
Lesenswert?
• ▲
▼
rm-rf schrieb:
> habs oben schon geschrieben, die eingegebenen messwerte sind weg sobald
> "eingabeMesswerte" zurückspringt.

Ja ist richtig, ich glaube es liegt daran dass ich hier 2 verschiedene 
Arrays verwende.

Ich probier es nochmal aus und gebe euch morgen bescheid.

DAnke euch allen.

Gruß
Malvin
#4088175
Lesenswert?
• ▲
▼
Ich vermute du wolltest eher sowas programmieren:
1
void eingabeMesswerte(int anz, double *wert)
2
{
3
  double messW;
4
  for(int i=0; i<anz; i++)
5
  {
6
    printf("Geben Sie bitte den %i. Messwert ein: ", i+1);
7
    scanf("%lf", &messW);
8
    wert[i] = messW;
9
  }
10
}

Diese Funktion ließt so viele Messwerte ein wie anz angibt und speichert 
die Werte in dem zweiten Parameter wert. Achte hier auf die Art wie die 
Parameter übergeben werden. Der erste Parameter ist ein einfacher int, 
keine Referenz auf ein int wie in deinem Beispiel. Eine Referenz auf ein 
int macht nur dann Sinn wenn die Funktion den originalen Wert verändern 
soll. Der zweite Parameter ist ein Pointer und zeigt auf das erste 
Element von einem Array. Darüber kannst du dann das Array was irgendwo 
in der main Funktion steht mit Daten füllen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.