Variablen Problem
-
Hi hab ein kleines Problem mit einer Variablen:
Und zwar es soll in der Funktion "ampel" die Reaktionszeit gemessen werden, "duration_c", er zeigt sie auch korrekt an wenn er sich noch in der Funktion "ampel" befindet, sobald ich jedoch nach dem Funktionsaufruf von "ampel" in "main" mit der Variablen "duration_c" weiterarbeiten will setzt er mir diese immer auf null????
#include <math.h> #include <iostream> #include <string> #include <windows.h> #include <conio.h> #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <dos.h> #include <time.h> using namespace std; double duration_c; //liest eine Float Zahl ein und überprüft diese float lese_float(string s); //Wartet eine zufällige Zeit zwischen min und max in Sekunden void Verzoegerung(int min, int max); //Ampel double ampel(float duration_c); //Reaktionswegberechnung float reaktionsweg(DWORD tr, float v0); //Bremmswegberechnung float bremsweg(float v0, float a0); void main (void) { float v0(0), sh(0), sa(0), sb(0), a0(10); //a0 = Bremsverzögerung in m/s² float rktweg; v0 = lese_float("Geben sie die Geschwindigkeit V0 in m/s ein: "); sh = lese_float("Geben sie den Abstand zum Hindernis in m ein: "); ampel(duration_c); setvisualpage(1); setactivepage(1); rktweg= v0*duration_c; cout << rktweg; sb = bremsweg(v0, a0); if ((sb + rktweg) > sh) cout << "Game Over!!!"; } float lese_float(string s) { float A = -1.0; bool ok = false; cout << s; do { cin >> A; if (!cin.good() || (A < 0.0)) //Wenn cin nich funktionier hat, oder A negativ ist { cout<< "Falsche eingabe! Bitte positive Flieskommazahl eingeben!" << endl; cout << s; cin.clear(); cin.ignore(99,'\n'); }// if Fehler else ok = true; }while(!ok); cin.ignore(99,'\n'); return A; } float bremsweg(float v0, float a0) { float bremmsweg; bremmsweg = (3/2) * (v0*v0)/a0; //Rechnung return bremmsweg; } double ampel(float duration_c) { int gdriver=DETECT,gmode; int random; char zk[]="Bitte Taste druecken sobald die Ampel auf gruen umspringt"; // Init Grafik und Layout initgraph(&gdriver,&gmode,""); setvisualpage(2); setactivepage(2); settextstyle(3,0,1); outtextxy(70,0,zk); delay(2000); setcolor(4); pieslice(150,200,0,360,50); pieslice(300,200,0,360,50); pieslice(450,200,0,360,50); setcolor(2); random=7000+rand()%15000; delay(random); pieslice(150,200,0,360,50); pieslice(300,200,0,360,50); pieslice(450,200,0,360,50); clock_t start_c, finish_c; start_c= clock(); getch(); finish_c= clock(); duration_c= (double)(finish_c -start_c)/(CLOCKS_PER_SEC); cout <<"Reaktionszeit= "<<duration_c<<" s\n\n"; return duration_c; }
-
Hi,
des Problems Ursache ist, dass du zwar eine globale double duration_c;
hast, aber die Funktion ampel einen Parameter namens duration_c übernimmt.Es wird einfach nur der Wert von duration_c in den Parameter kopiert und innerhalb von ampel ist mit duration_c die LOKALE Variable gemeint, die GLOBALE wird verdeckt.
Zurück in main wird mit duration_c dann wieder die GLOBALE gemeint, die aber in ampel verdeckt war.
Du solltest gänzlich auf die globale Variante verzichten, und stattdessen duration_c in main definieren.
Du musst sie dann auch nicht beim Aufruf von ampel übergeben, sondern könntest sie als Rückgabewert ermitteln.double duration_c; duration_c = ampel(); cout << duration_c;
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.