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.


Anmelden zum Antworten